[英]ListView items aren't updating with notifyDataSetChanged()
顯然notifyDataSetChanged()
僅更新listview
的可見項,我有一個系統,可以在單擊(更改為dkgray)項目時更改其背景顏色,並將其他所有項目設置為透明(默認),但是將其他所有項目設置為透明不可見,保持選中狀態(dkgray)(我只希望當前選中的項目為dkgray)。 有沒有一種方法可以強制notifyDataSetChanged()
更新所有項目。
例子如下:
//makes all item backgrounds transparent
public void resetListViewBackground(){
for (int i = 0; i < listView.getChildCount(); i++){ //parent.getChildCount()
listView.getChildAt(i).setBackgroundColor(Color.TRANSPARENT);
}
}
//reloads the listview
private void reloadListView() {
listItems.clear();
adapter.notifyDataSetChanged();
listView.invalidateViews();
ArrayList<HashMap<String, String>> notesArrayList = dbTools.getAllNotes();
for (int i = 0; i < notesArrayList.size(); i++){
String temp = "";
if (notesArrayList.get(i).get("note").length() > 51){
temp = notesArrayList.get(i).get("note").substring(0,50).toString() + "...";
} else {
temp = notesArrayList.get(i).get("note").toString();
}
listItems.add(temp);
adapter.notifyDataSetChanged();
}
}
我在所有地方調用resetListViewBackground()
,之后都調用reloadListView()
。 這就是我用來突出顯示所選項目的方法。
view.setBackgroundColor(Color.DKGRAY);
同樣,此問題最常見的情況是每第6個項目都會突出顯示。 listview
僅顯示約4個項目。
由於視圖回收已完成,因此getChildCount()
方法不適用於所有列表項。 Astral在評論中寫道是正確的。
1)創建一個自定義適配器。(請參閱http://windrealm.org/tutorials/android/listview-with-checkboxes-without-listactivity.php )
2)在onListItemClick
偵聽器的onItemClick()
方法內,調用適配器的notifyDataSetChanged()
方法(無論用戶何時單擊列表項)。
我修改了我提到的項目並將其發布到我的Dropbox中(只需將其導入Eclipse並運行)。 在https://www.dropbox.com/s/gchccjzpkxk8n2z/Planets_modified.zip中查看
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.