我ArrayAdapter
的实现是这样的,它会监听下位数据的变化。因此,数据中的任何更改都会通知适配器并调用notifydataSetChanged()
public class MyAdapter extends ArrayAdapter implements ObjectStateListener {
@Override
public void onObjectStateChanged() {
/*Call appropriate functions as the underlying data as changed.
A good way of doing that would be to retrieve only the positions of the filtered values
so that the original dataholder can be used but display only certain indices
*/
Log.v(TAG, "FilterCriteria changed. Trigger fired");
this.filterPositions = Helper().getFilteredPositions(filterCriteria, mAppartments);
Log.v(TAG, "CALLING NOTIFYDATASETCHANGED()...");
notifyDataSetChanged();
Log.v(TAG, "FINISHED CALLING NOTIFY DATASET CHANGED");
}
}
在上面的代码中,只要数据发生变化,就会调用函数onObjectStateChanged()
,然后调用notifyDataSetChanged()
。为了测试onObjectStateChanged()
是否被正确调用,我已经放了一堆Log语句,你可以看到。所有这些日志都出现在logcat中。但是在调用getView()
后没有调用notifyDataSetChanged()
,因此列表视图没有被刷新。
为什么会这样? notifyDataSetChanged()
应该确保调用getView()
并且新数据会反映在ListView中吗?
ObjectStateChangeListener
public interface ObjectStateListener {
public void onObjectStateChanged();
public void listenForStateChange(Object o);
}
答案 0 :(得分:-1)
如果要在列表中删除或插入新值,那么每当适配器列表发生更改时,都会调用notifystatechange(),因此在插入或删除值调用notifystatechange()之后,它将刷新listview。
答案 1 :(得分:-1)
我不得不停止在我的AutoCompleTextViews上使用notifyDataSetChanged(),因为它们也没有刷新。我只保留适配器的本地副本,然后在更改时使用新数据集重置它。
确保您的ArrayAdapter设置为在更改时通知(默认情况下),并且您在技术上甚至不需要根据文档调用notifyDataSetChanged():http://developer.android.com/reference/android/widget/ArrayAdapter.html
答案 2 :(得分:-1)
首先更新您在适配器中保留它的引用的数据,然后调用notifyDataSetChanged()。您还必须传递新数据。