【发布时间】:2009-09-01 13:49:26
【问题描述】:
如何在android中的ListView中选择多个项目。
【问题讨论】:
标签: android
如何在android中的ListView中选择多个项目。
【问题讨论】:
标签: android
实际上你可以;)这只是用户体验的问题,对吧?
试试这个,(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 步: setAdapter 到您的列表视图。
listView.setAdapter(new ArrayAdapter<String>(this, android.R.layout.simple_list_item_multiple_choice, GENRES));
第二步:设置listview的选择模式。下面代码的第二行代表应该选中哪个复选框。
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();
}
【讨论】:
getCheckedItemPositions() 是否存储所有已选择的值?但这会很奇怪。解决这个问题会很好,我试过了,但我知道我无法解决它。所以,如果有人知道,请分享解决方案。
此示例存储您检查的值并将它们显示在 toast 中。当您取消选中项目时它会更新http://android-coding.blogspot.ro/2011/09/listview-with-multiple-choice.html
【讨论】:
要在取消选中某些项目后“更新” Toast 消息,只需将此行放在 for 循环中:
if (sp.valueAt(i))
结果如下:
for(int i=0;i<sp.size();i++)
{
if (sp.valueAt(i))
str+=names[sp.keyAt(i)]+",";
}
【讨论】:
很简单,
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());**
}
});
【讨论】:
在listView中可以通过Adapter来使用
ArrayAdapter<String> adapterChannels = new ArrayAdapter<>(this, android.R.layout.simple_list_item_multiple_choice);
【讨论】:
并得到它:
public void onItemClick(AdapterView<?> parent, View view,
int position, long id) {
Log.d(getLocalClassName(), "onItemClick(" + view + ","
+ position + "," + id + ")");
}
});
【讨论】:
你必须选择ArrayAdapter中的选项:
ArrayAdapter<String> adapter = new ArrayAdapter<String>
(this, android.R.layout.simple_list_item_single_choice, countries);
【讨论】:
最好的方法是在多选时使用带有列表视图的上下文操作栏,您可以使用以下代码将列表视图设置为多选
listview.setChoiceMode(AbsListView.CHOICE_MODE_MULTIPLE_MODAL);
现在为Listview设置multichoice listener,可以在Android multi select listview看到multiselect listview的完整实现
【讨论】:
【讨论】: