Android:随机更新自定义列表视图的可能解决方案

时间:2011-03-29 13:17:56

标签: android listview

我遇到的情况是,每当我的数据库更新时,我都想使用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));

2 个答案:

答案 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);
    }
}