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