我有一个不寻常的问题,我的ListView
。我目前有一个“deselectAll()
”方法,它遍历我的ListView中的项目,并将它们设置为未选中(项目实现Checkable
接口)。 “checked”变量得到正确更改(视图报告为未被检查),但视觉指示器(在本例中为背景更改)不显示视图为未选中状态(背景保持选中项目的颜色)。ListView项目背景不变
我循环,并通过我的列表视图像取消所以(我还加我declerations):
private ListView vw_entryList;
private void deselectAll() {
for (int i = 0; i < sAdapter.getCount(); i++) {
((Entry)vw_entryList.getItemAtPosition(i)).setChecked(false);
}
}
的代码为我实现setChecked()
如下:
public void setChecked(boolean checked) {
_checked = checked;
if (checked) {
setBackgroundResource(R.drawable.listview_checked);
}
else {
setBackgroundResource(R.drawable.listview_unchecked);
}
invalidate();
}
应当注意当点击这些项目时,它们在OnItemClickListener
中的选中和未选中之间切换,并且这可以正常工作,具有背景更改和所有功能。用于切换的代码非常相似:
public void toggle() {
_checked = !_checked;
setBackgroundResource(_checked ?
R.drawable.listview_checked : R.drawable.listview_unchecked);
invalidate();
}
我能看到的唯一区别是在方法从名为。在OnItemClickListener.onClick()
方法中调用toggle()
,而我的deselectAll()
是从同一个类中的按钮标准OnClickListener
中调用的。 有没有人有任何想法,为什么当我调用我的deselectAll()函数后,背景不会改变?
背景是我从XML创建的状态列表可绘。出于某种原因,我无法获取state_checked状态,因此我实现了一个可绘制的名为listview_checked的单独状态列表,然后切换代码中的资源。不幸的是,这个cacheColorHint属性并没有影响任何东西,链接是一个很好的阅读,但我认为与我的问题无关。这很让人困惑,因为更改onItemClickListener中的可绘制背景工作正常。尽管感谢有趣的链接。 –
我想你会做的更好,然后通过不改变背景,但通过简单地添加一个“选中的颜色”“fill_parent”视图到您的列表项目,并使其状态变为可选/不可见状态时更改为选中/取消选中 –
即使在此更改后(VISIBLE/INVISIBLE切换),视图不会改变背景。嗯,我会继续努力。 –