繁体   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