2013年9月13日金曜日

android ListView 複数リスト 選択した値を取得する

使用するパッケージ
android.widget.ListView


1. [ xmlファイルを修正 ]パレットのCompositeからListViewを選択し配置する。
  android:choiceMode="multipleChoice"を追記する

2. 表示するデータを作成し、表示する。


  2-1.静的なリストの場合

   ・ strings.xml を修正しリストを作成する。

     追加[add]を押し[String Array]を選択する。
           [String Array]を選択したまま、右の名前[Name]を変更する。
     内容を追加する。
     [String Array]を選択したまま、追加[add]を押し、Itemを選択し完了[finish]を押す。
      先ほどと、同様右の名前に値をセットする。

   ・ リスト表示する        
           OutlineのListViewを選択し、PropertiesのListView直下のEntriesをクリックし用意した配列を選択する。




  2-2.動的なリストの場合(カスタマイズする際は別途記入)
   ・  Activityファイルを修正する( MainActivity.java )
   
          使用するパッケージ
          java.util.ArrayList
          android.widget.ArrayAdapter
          android.widget.AdapterView
          android.widget.Toast (表示用に使用しているだけ)
  public class MainActivity extends Activity{

    private ListView list;
   private ArrayAdapter<String> adapter;
    private ArrayList<String> data;

   public void onCreate(){
    super.onCreate(savedInstanceState);
       setContentView(R.layout.activity_listview);

    //リストを動的に作成
    data = new ArrayList<String>();
       for( int i=0; i < 30; i++ ){
         
            String columns_name = "select_" + i;
          data.add( columns_name );

      //アダプターを用意する
//第一引数 コンテキスト(アクティビティ), 第二引数 リストの種類, 第三引数 リストデータ
      adapter = new ArrayAdapter<String>( MainActivity.this, android.R.layout.simple_list_item_multiple_choice, data  );
    
            ListView list = (ListView)findViewById( R.id.listView1 );
            
            //リストビューにアダプターをセット
      list.setAdapter( adapter );
      
      //リスト項目がクリックされたときの処理
      //何かしらのアクションでリスト項目を追加したい時は、adapter.add("new_item!");のようにアダプターに追加する
      list.setOnItemClickListener( new AdapterView.OnItemClickListener() {

        public void onItemClick( AdapterView<?> av, View view, int position, long id ){
   
          //一度でもチェックされた項目の配列を取得する
          //名前的にチェックしている項目の配列を取得してくれそうだけど、そうではない事に注意
                SparseBooleanArray checked = list.getCheckedItemPositions();
          StringBuilder sb = new StringBuilder();
          
          //★配列の個数分ループ
          for( int index = 0; index < checked.size(); index++ ){
            //valueAtでチェックされていればtrueが返ってくる
            if( checked.valueAt(index) ){
             int key = checked.keyAt(index);//チェックされている配列のキーを取得
             sb.append( data.get(key) + "," );//用意した配列から値を取得する
            }
                    }

                    Toast.makeText( MainActivity.this , sb.substring( 0, sb.length() -1  ) , Toast.LENGTH_SHORT ).show();
               }
           });
        }
    }

■以下に別の方法がありますが、OSのバージョンによってisCheckedの戻り値が変わるそうなので上記の方法をおススメします。
   for( int index = 0; index < list.getChildCount(); index++ ){
       CheckedTextView check = (CheckedTextView)list.getChildAt(index);
       if( check.isChecked() ){
//チェックされている時の処理
       }
   }

0 件のコメント:

コメントを投稿