大家好我想在列表视图中突出显示多个项目。
所以我尝试SngList.setChoiceMode(ListView.CHOICE_MODE_MULTIPLE);
,但它没有帮助
我正在使用自定义适配器并扩展BaseAdapter
我使用的是ListView而不是AbsListView
我不想使用CAB,因为它与我的应用程序的设计不相符
我也不想使用适配器的getView
方法。
我也不想使用复选框,我想我会为每个项目使用布尔值并将其传递给getviews
如果我在这里没有得到解决方案,但是没有#&# 39;看起来太优雅和整洁。我相信在没有使用适配器的getview()
我试过了:
android:drawSelectorOnTop="false"
android:listSelector="@android:color/darker_gray"
在xml中,但它只突出显示其中一个项目,只要我点击另一个项目,它就会突出显示它......
那么有没有正确的方法呢?
以下是我的应用的外观:
答案 0 :(得分:3)
SngList.setChoiceMode(ListView.CHOICE_MODE_MULTIPLE);
这应该足够了,但你必须使用getView来区分所选和未选择的状态。
您可以使用isItemChecked()方法来确定是否选择了项目的天气,因此您不必为每个项目引入布尔变量。
修改强>
这样的事情:
@Override
public View getView(int position, View convertView, ViewGroup parent) {
ListView list = (ListView) parent;
if(list.isItemChecked(position)){
//...
}
else{
//...
}
答案 1 :(得分:3)
您可以使用与CAB相同的逻辑,但避免使用CAB。
您的列表项应该具有FrameLayout,如
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:foreground="?android:attr/activatedBackgroundIndicator">
....
设置onItemClickListener以在长按
时更改选择模式listView.setOnItemLongClickListener(new AdapterView.OnItemLongClickListener() {
@Override
public boolean onItemLongClick(AdapterView<?> arg0, View arg1, int arg2, long arg3) {
if (mInMultiChoiceMode) {
// if already in multi choice - do nothing
return false;
}
mInMultiChoiceMode = true;
// set checked selected item and enter multi selection mode
final AbsListView list = (AbsListView) arg0;
list.setChoiceMode(AbsListView.CHOICE_MODE_MULTIPLE);
list.setItemChecked(arg2, true);
return true;
}
});
listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> arg0, View arg1, int arg2, long arg3) {
if (mInMultiChoiceMode) {
//exit multi choice mode if number of selected items is 0
if (((AbsListView) arg0).getCheckedItemCount() == 0) {
((AbsListView) arg0).setChoiceMode(AbsListView.CHOICE_MODE_NONE);
mInMultiChoiceMode = false;
}
} else {
// do whatever you should as in normal non-multi item click
System.out.println("CLICK");
}
}
});
答案 2 :(得分:1)
使用 SngList.setChoiceMode(ListView.CHOICE_MODE_MULTIPLE);
然后在适配器中手动执行。