簡単な方法の1つは、を使用することandroid.R.layout.simple_list_item_multiple_choice
です。このコード例はあなたが望むことをします(私がカーソルに連絡先を使用したことに注意してください):
public class ListCheck extends ListActivity {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.list_check);
this.getListView().setChoiceMode(ListView.CHOICE_MODE_MULTIPLE);
Cursor cursor = managedQuery(ContactsContract.Contacts.CONTENT_URI,
null, null, null, null);
startManagingCursor(cursor);
String[] columns = new String[] { ContactsContract.Contacts.DISPLAY_NAME };
int[] to = new int[] { android.R.id.text1 };
SimpleCursorAdapter adapter = new SimpleCursorAdapter(this,
android.R.layout.simple_list_item_multiple_choice, cursor, columns, to);
this.setListAdapter(adapter);
Button finishButton = (Button) this.findViewById(R.id.finishButton);
finishButton.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
SimpleCursorAdapter adapter = (SimpleCursorAdapter) ListCheck.this.getListAdapter();
Cursor cursor = adapter.getCursor();
ListView lv = ListCheck.this.getListView();
SparseBooleanArray selectedItems = lv.getCheckedItemPositions();
for (int i = 0; i < selectedItems.size(); i++) {
int selectedPosition = selectedItems.keyAt(i);
cursor.moveToPosition(selectedPosition);
Log.d("", cursor.getString(cursor.getColumnIndex(
ContactsContract.Contacts.DISPLAY_NAME))+" is checked");
Log.d("", "row id: "+adapter.getItemId(selectedPosition));
}
}
});
}
}
アクティビティのレイアウト:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical" >
<Button
android:id="@+id/finishButton"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Button" />
<ListView
android:id="@android:id/list"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:choiceMode="multipleChoice" />
</LinearLayout>
ただし、各行(画像、サブタイトルなど)内に他のカスタムデータを追加する場合は、を使用して行のカスタムレイアウトを作成する必要がありますCheckedTextView
。CheckedTextView
によって使用されるため、ここで実際に重要なのはandroid.R.layout.simple_list_item_multiple_choice
です。
この例に従ってください:
<com.mfp.tests.CheckableLinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical" >
<CheckedTextView
android:id="@+id/text"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:gravity="center_vertical"
android:checkMark="?android:attr/listChoiceIndicatorMultiple"
/>
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="added a data: subtitle"/>
</com.mfp.tests.CheckableLinearLayout>
最後に、の代わりにカスタムレイアウトを使用しましたLinearLayout
。レスポンシブのチェックボックスを作成するにはCheckedTextView
(行をクリックすると自動的にチェックまたはオフになります)、レイアウトを実装する必要がありますCheckable
(LinearLayoutは実装しません)。したがって、このリンクCheckableLinearLayout
からクラスをコピーする必要があります。
<uses-permission android:name="android.permission.READ_CONTACTS" />
PS:上記のコードを試したい場合は、Manifest.xml内に配置することを忘れないでください