簡體   English   中英

ListView項未使用notifyDataSetChanged()更新

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM