Java 列表视图项不是';t使用notifyDataSetChanged()更新

Java 列表视图项不是';t使用notifyDataSetChanged()更新,java,android,android-listview,Java,Android,Android Listview,显然,notifyDataSetChanged()只更新列表视图中可见的项目,我有一个系统,可以在单击某个项目时更改其背景颜色(为dkgray),并将其他所有项目设置为透明(默认),但其他不可见的项目仍保持选中状态(dkgray)(我只希望当前选定的项目为dkgray)。是否有方法强制notifyDataSetChanged()更新所有项目 下面是一个例子: //makes all item backgrounds transparent public void resetListViewBac

显然,
notifyDataSetChanged()
只更新
列表视图中可见的项目,我有一个系统,可以在单击某个项目时更改其背景颜色(为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();
    }
}
此外,此问题最常见的情况是每6个项目都会突出显示。
listview
一次只显示大约4个项目。

视图循环完成后,
getChildCount()
方法不会对所有列表项目起作用。 阿斯特拉尔在评论中写道,他是对的

1) 创建自定义适配器。(请参阅)

2) 在
onListItemClick
listener的
onItemClick()
方法中,调用适配器的
notifyDataSetChanged()
方法(每当用户单击列表项时)

我修改了我提到的项目,并将其发布在我的Dropbox上(只需在Eclipse中导入并运行)。

上查看,我所有的适配器都是listView=(listView)findViewById(android.R.id.list);adapter=new ArrayAdapter(这个,android.R.layout.simple\u list\u item\u 1,listItems);setListAdapter(适配器);为您的列表创建自定义适配器,这是由于视图回收造成的。另外,notifyDataSetChanged()只能在UI线程中工作。请详细说明我需要做什么。发布您的适配器代码Astral说对了,请这样做,然后放置
adapter.notifyDataSetChanged()超出for语句噢,您不应该扩展ArrayAdapter。这就是我认为你应该做的(至少对于你现在的问题)。你看过我贴的链接了吗?一旦你了解了它的工作原理,它就可以定制了。例如,我修改了代码,这样我就可以根据需要隐藏/显示复选框。是的,很抱歉,我刚刚意识到我应该这样做,我只是把我的代码放在一个完全独立的java类文件中。我会看看是否能让它工作,不管你是否有一个单独的Java文件。但是,作为一个快速的开始,我建议您复制该指南,然后尝试在适配器的
getView()
方法中更改颜色。提示:在
类Planet
(在该示例中)中添加一个变量,该变量将保存列表项的背景色。然后,在适配器外部的
onClick()
方法中,设置您自己的颜色。如果您尚未解决问题,您可能对此感兴趣:
view.setBackgroundColor(Color.DKGRAY);