我有一个自定义的列表视图,每个条目都包含旋转的ProgressBar和单行文本视图。我总是只更新列表中的第一项。问题是,每次我调用notifyDataSetChanged时,所有可见视图要么被重新创建,要么被回收为convertView。
这种方法有两个问题:
都会重新启动。
所以我想我只需要在适配器中保留对first的引用,然后手动更新它。它工作正常,但它会随机抛出IllegalStateException (“适配器的内容已经更改,但ListView没有收到通知。请确保适配器的内容不是从后台线程修改的,而是从UI线程修改的。”)
我该怎么解决呢?是否有方法通知ListView只更改了第一个条目?即使有,ProgressBar动画仍然会失败。还有其他方法手动更新吗?
谢谢
发布于 2011-09-05 01:01:07
每当我需要更新列表视图上的单个项目时,我都会使用以下内容:
public void updateItemAt(int index) {
View v = listView.getChildAt(index - listView.getFirstVisiblePosition());
if (v != null) {
//updates the view
}
}缺点是需要在适配器中保存对listView的引用。由于此代码通常是从后台任务调用的,因此必须使用处理程序来调用它:
Handler myHandler = new Handler() {
public void handleMessage(Message msg) {
int index = msg.what;
myAdapter.updateItemAt(index);
};
};
//when task is complete:
myHandler.sendEmptyMessage(index);https://stackoverflow.com/questions/7301962
复制相似问题