我有一個不尋常的問題,我的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切換),視圖不會改變背景。嗯,我會繼續努力。 –