2011年11月18日金曜日

ListViewの複数行選択

ListViewのコードを載せるのも、もう3回目。
だいぶ慣れてきました。
今回はリストを複数選択できるようにします。

ポイントとなるのは次の3点です。

  • android.R.layout.simple_list_item_multiple_choice
    Javaソースの26行目です。
    これをArrayAdapterのコンストラクタに渡すことで、チェックボックスが表示されます。
  • setChoiceMode(ListView.CHOICE_MODE_MULTIPLE)
    Javaソースの37行目です。
     コメントにある通り、これを実行する事で複数選択が可能となります。
  • android:choiceMode="multipleChoice"
    xmlの方の11行目。
    ここでも複数選択を指定してやります。
Javaコードは以下の通り
import android.app.Activity;
import android.os.Bundle;
import android.util.SparseBooleanArray;
import android.view.View;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.ArrayAdapter;
import android.widget.ListView;
import android.widget.Toast;

public class ListView03 extends Activity implements OnItemClickListener{

 @Override
 protected void onCreate(Bundle savedInstanceState) {
  super.onCreate(savedInstanceState);
  setContentView(R.layout.main);

  // ListViewで表示するデータを作成
  for (int i = 0; i < mWords.length; i++) {
    mWords[i] = String.valueOf(i);
  }

  // リストアダプタを作成
  ArrayAdapter<String> adapter = new ArrayAdapter<String>(
    this,
    android.R.layout.simple_list_item_multiple_choice,
    mWords);

  // リストアダプタをリストビューにセット
  mListView = (ListView) findViewById(R.id.listview);
  mListView.setAdapter(adapter);

  // ListView内部のViewがフォーカス出来ないようにする
  mListView.setItemsCanFocus(false);

  // 複数選択可能にする
  mListView.setChoiceMode(ListView.CHOICE_MODE_MULTIPLE);

  // クリックイベントを取得
  mListView.setOnItemClickListener(this);
 }

 @Override
 public void onItemClick(
   AdapterView<?> parent,
   View view,
   int position,
   long id) {

  // 選択状態を取得する
  SparseBooleanArray checked = mListView.getCheckedItemPositions();

  // 選択された要素をトーストで表示
  String word = "";
  for (int i = 0; i < mWords.length; i++) {
   word += mWords[i] +
     ":" +
     checked.get(i) +
     System.getProperty("line.separator");
  }
  Toast.makeText(this, word, Toast.LENGTH_LONG).show();
 }

 private ListView mListView;
 private String[] mWords = new String[10];
}
"res/layout/main.xml"のコードは以下の通り
<linearlayout
    android:layout_height="fill_parent"
    android:layout_width="fill_parent"
    android:orientation="vertical"
    xmlns:android="http://schemas.android.com/apk/res/android"
>
<listview
    android:id="@+id/listview"
    android:layout_height="fill_parent"
    android:layout_width="fill_parent"
    android:choicemode="multipleChoice"
>
</linearlayout>

AndroidManifest.xmlは割愛します(いつもと一緒だから。。。)。


リストをクリックするとToastが表示されます。
(チェックボックスが選択されているのがTrueになってます。)

0 件のコメント:

コメントを投稿