我有4个项目的列表,我使用了listview。我想在收到内部事件时动态更改字符串。我看到当我收到事件时,我正确设置字符串,然后调用
mAdapter.notifyDataSetInvalidated();
mAdapter.notifyDataSetChanged();
但列表没有更新。
答案 0 :(得分:2)
我有同样的经历。原因是列表适配器在错误的线程上更新,即不是UI线程。通过更改UI线程上的适配器数据(正如我在其他帖子中找到的那样),可以轻松解决这个问题:
runOnUiThread(new Runnable() {
public void run() {
// code that changes the list adapter data
}
});
当然,您总是可以创建一个实现Runnable的(内部)类,该类随列表适配器和要添加,插入等的数据一起提供。
注意:默认情况下调用notifyDataSetInvalidated()或notifyDataSetChanged()是没有必要的,除非你用setNotifyOnChange(false)显式关闭它;
答案 1 :(得分:0)
我认为只有在适配器上使用add(或insert),remove或clear函数时notifyDataSetChanged才有效。 您可以重建列表适配器以强制刷新listView。
对不起我的英语不好