ab1*_*b11 38 android listview android-adapter
我ListView正在使用扩展名BaseAdapter,我无法正确刷新它.当我刷新时,似乎旧数据在新数据之上绘制,直到滚动事件发生.旧行绘制在新行的顶部,但是当我开始滚动时,旧行会消失.
我已经打过电话invalidateViews(),notifyDataSetChanged()和notifyDataSetInvalidated().我的代码看起来像:
private void updateData()
{
List<DataItems> newList = getNewList();
MyAdapter adapter = new MyAdapter(getContext());
//my adapter holds an internal list of DataItems
adapter.setList(newList);
mList.setAdapter(adapter);
adapter.notifyDataSetChanged();
mList.invalidateViews();
}
Run Code Online (Sandbox Code Playgroud)
Lon*_*uck 59
对于那些仍有问题的人,我这样解决了:
List<Item> newItems = databaseHandler.getItems();
ListArrayAdapter.clear();
ListArrayAdapter.addAll(newItems);
ListArrayAdapter.notifyDataSetChanged();
databaseHandler.close();
Run Code Online (Sandbox Code Playgroud)
我首先从适配器中清除了数据,然后添加了新的项目集合,然后才设置notifyDataSetChanged();
这对我来说一开始并不清楚,所以我想指出这一点.请注意,不调用notifyDataSetChanged()视图将不会更新.
khc*_*tro 12
在我的理解,如果你想在数据已经改变立即刷新的ListView,你应该叫notifyDataSetChanged()在RunOnUiThread().
private void updateData() {
List<Data> newData = getYourNewData();
mAdapter.setList(yourNewList);
runOnUiThread(new Runnable() {
@Override
public void run() {
mAdapter.notifyDataSetChanged();
}
});
}
Run Code Online (Sandbox Code Playgroud)
Gub*_*bel 11
您不必创建新的适配器来更新ListView的内容.只需将您的适配器存储在一个字段中,并使用以下代码更新您的列表:
mAdapter.setList(yourNewList);
mAdapter.notifyDataSetChanged();
Run Code Online (Sandbox Code Playgroud)
为了澄清这一点,您的活动应该如下:
private YourAdapter mAdapter;
protected void onCreate(...) {
...
mAdapter = new YourAdapter(this);
setListAdapter(mAdapter);
updateData();
}
private void updateData() {
List<Data> newData = getYourNewData();
mAdapter.setList(yourNewList);
mAdapter.notifyDataSetChanged();
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
136004 次 |
| 最近记录: |