我遇到的情况是,每当我的数据库更新时,我都想使用BaseAdapter更新我的自定义列表视图。我试过在这个自定义列表上调用invalidate()但它没有工作,同样我甚至尝试过一段时间后更新我的列表的计时器,这也不起作用。请让我知道可能的解决方案。
更新
这就是我制作自定义列表视图的方式
li= (ListView)findViewById(R.id.id_lv_row);
ColorDrawable divcolor = new ColorDrawable(Color.DKGRAY);
registerForContextMenu(li);
li.setDivider(divcolor);
li.setDividerHeight(2);
li.setAdapter(new FriendsPositionAdapter(this));
答案 0 :(得分:3)
BaseAdapter.notifyDataSetChanged()
应该可以解决问题。这就是刷新列表所需要做的一切。
答案 1 :(得分:1)
Invalidate仅用于重新绘制视图,您必须告诉List适配器(BaseAdapter)数据集已更改。 当数据发生变化时,将新数据集作为适配器,然后调用notifyDataSetChanged()......
为了使函数notifyDataSetChanged()必须更改适配器数据。请记住,更改的原始数据不会自动反映到适配器。
//here i retrieve the new list, named "beans"
lista = (BeanList) result.getDataObject();
Vector<Bean>beans = list.getBeanList();
((BeanListAdapter)listAdapter).syncData(beans);
((BeanListAdapter)listAdapter).notifyDataSetChanged();
//now the syncData method
public void syncData( List<PINPropiedad> newData ){
for(Object o : newData){
add(o);
}
}