如何在Android中的ListView中选择多个项目。
答案 0 :(得分:43)
实际上你可以;)这只是用户体验的问题,对吧?
试试这个,(1)列表控制集
listView.setChoiceMode(ListView.CHOICE_MODE_MULTIPLE);
listView.setItemsCanFocus(false);
(2)将列表项定义为
<CheckedTextView
xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="?android:attr/listPreferredItemHeight"
android:textAppearance="?android:attr/textAppearanceLarge"
android:gravity="center_vertical"
android:paddingLeft="6dip"
android:paddingRight="6dip"
android:checkMark="?android:attr/listChoiceIndicatorMultiple"
android:background="@drawable/txt_view_bg" />
这与android.R.layout.simple_list_item_multiple_choice
相同,除了
android:background="@drawable/txt_view_bg
(3)将drawable txt_view_bg.xml定义为
<item android:drawable="@drawable/selected"
android:state_checked="true" />
<item android:drawable="@drawable/not_selected" />
注意: - 处理多项选择的首选方法是在点击项目点击时跟踪您自己的选择,而不是依赖于列表中的状态。
答案 1 :(得分:13)
第1步: setAdapter到您的列表视图。
listView.setAdapter(new ArrayAdapter<String>(this, android.R.layout.simple_list_item_multiple_choice, GENRES));
第2步:为列表视图设置选择模式。下面第二行代码表示应选中哪个复选框。
listView.setChoiceMode(ListView.CHOICE_MODE_MULTIPLE);
listView.setItemChecked(2, true);
listView.setOnItemClickListener(this);
private static String[] GENRES = new String[] {
"Action", "Adventure", "Animation", "Children", "Comedy", "Documentary", "Drama",
"Foreign", "History", "Independent", "Romance", "Sci-Fi", "Television", "Thriller"
};
第3步:在SparseBooleanArray中返回已检查的视图,因此您可以使用以下代码获取键或值。下面的示例只是在一个字符串中显示选定的名称。
@Override
public void onItemClick(AdapterView<?> adapter, View arg1, int arg2, long arg3)
{
SparseBooleanArray sp=getListView().getCheckedItemPositions();
String str="";
for(int i=0;i<sp.size();i++)
{
str+=GENRES[sp.keyAt(i)]+",";
}
Toast.makeText(this, ""+str, Toast.LENGTH_SHORT).show();
}
答案 2 :(得分:5)
此示例存储您已检查的值并以吐司形式显示它们。取消选中项目http://android-coding.blogspot.ro/2011/09/listview-with-multiple-choice.html
时会更新答案 3 :(得分:2)
取消选中某些项目后,要“更新”Toast消息,只需将此行放在for循环中:
if (sp.valueAt(i))
结果如此:
for(int i=0;i<sp.size();i++)
{
if (sp.valueAt(i))
str+=names[sp.keyAt(i)]+",";
}
答案 4 :(得分:1)
这很简单,
listViewRequests.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> adapterView, View view, int i, long l) {
**AppCompatCheckedTextView checkBox = (AppCompatCheckedTextView) view;**
Log.i("CHECK",checkBox.isChecked()+""+checkBox.getText().toString());**
}
});
答案 5 :(得分:0)
并得到它:
public void onItemClick(AdapterView<?> parent, View view,
int position, long id) {
Log.d(getLocalClassName(), "onItemClick(" + view + ","
+ position + "," + id + ")");
}
});
答案 6 :(得分:0)
您必须在ArrayAdapter
中选择选项:
ArrayAdapter<String> adapter = new ArrayAdapter<String>
(this, android.R.layout.simple_list_item_single_choice, countries);
答案 7 :(得分:0)
最好的方法是在multiselect上有一个带有listview的上下文操作栏,你可以使用以下代码将listview设为multiselect
listview.setChoiceMode(AbsListView.CHOICE_MODE_MULTIPLE_MODAL);
现在为Listview设置multichoice侦听器,您可以在Android multi select listview
看到多选列表视图的完整实现答案 8 :(得分:0)
I would advice to check the logic of ListActivity
according to what is needed could be the best way not to lose much time
答案 9 :(得分:0)
在listView中,您可以通过适配器使用它
ArrayAdapter<String> adapterChannels = new ArrayAdapter<>(this, android.R.layout.simple_list_item_multiple_choice);