如何在不实现Observable的对象上调用方法时通知?

时间:2016-01-29 02:59:24

标签: java android listview

我需要以某种方式知道ListView实例的适配器何时更改。

我正在考虑向listView对象添加一个观察者,但它没有实现Observable接口。

                strcpy(ac_mode, ac);

当列表视图的适配器发生变化时,还有其他方法可以知道吗?例如调用setAdapter()方法......?

---更新---

这是一个代码示例:

ListView listView;
      listView.addObserver(...); // method does not exist!

我的问题是:final ListAdapter firstAdapter = new SimpleAdapter( this, new ArrayList<Map<String, Object>>(), android.R.layout.simple_list_item_1, new String[] {"AAA"}, new int[] {android.R.id.text1} ); final ListAdapter secondAdapter = new SimpleAdapter( this, new ArrayList<Map<String, Object>>(), android.R.layout.simple_list_item_1, new String[] {"AAA"}, new int[] {android.R.id.text1} ); setListAdapter(firstAdapter); (new Timer()).schedule(new TimerTask() { @Override public void run() { Runnable r = new Runnable() { @Override public void run() { setListAdapter(secondAdapter); } }; new Handler(Looper.getMainLooper()).post(r); } }, 1000); 如何知道它何时与listView的实际适配器分离(因为firstAdapter取代了它?)

2 个答案:

答案 0 :(得分:0)

这是你在找什么?您可以在适配器上设置观察者。

registerDataSetObserver

答案 1 :(得分:0)

当它从ListView取消注册时,适配器会收到通知,所以我使用的是:

@Override
public void unregisterDataSetObserver(DataSetObserver observer) {
  super.unregisterDataSetObserver(observer);

  Log.d("Adapter just got unregistered from the listView!");
  [...]
}