我在ListView上使用自定义列表适配器设置了MultiChoiceModeListener。该列表由具有单个文本视图的相对布局和指示单击能力的图标组成。
MultiChoiceModeListener
设置为onItemCheckedStateChanged
,如下所示:
public void onItemCheckedStateChanged(
ActionMode mode,
int position,
long id,
boolean checked) {
Log.d(TAG, (checked ? "Checked" : "Un-checked"));
if (checked) {
listView.getChildAt(position).setBackgroundColor(
Color.parseColor("#6633b5e5"));
} else {
listView.getChildAt(position).setBackgroundColor(
Color.parseColor("#00000000"));
}
}
现在,问题在于,当用户长按列表时,启动选择器的第一个项目不会着色。 Log.d日志"已检查"但颜色没有改变。
if(checked)
测试中的其他内容会运行,但颜色不会发生变化。单击的下一个项目是彩色的,如果我取消选中并重新检查元素,颜色会正确更改。
如果我将列表适配器设置为默认值:
adapter = new ArrayAdapter<String>(
this,
android.R.layout.simple_list_item_1,data);
setListAdapter(adapter);
adapter.notifyDataSetChanged();
所以它似乎不适用于我的自定义布局。是什么给了什么?