我有一个带有 BaseAdapter 的 ListView。我想经常更新列表中的某些项目而不刷新内容。为了实现这一点,我使用了观察者模式。我有一个 Observable 对象,列表中的每个项目都是观察者。
public View getView(final int position, View convertView, final ViewGroup parent) {
final ItemViewHolder holder;
final Item item = (Item) getItem(position);
if (convertView == null) {
convertView = inflater.inflate(R.layout.item, parent, false);
/* ADD VIEWS TO HOLDER */
holder = new ItemViewHolder();
convertView.setTag(holder);
ItemObserver observer = new ItemObserver(holder, context);
mapObservers.put(holder, observer);
observable.addObserver(observer);
} else {
holder = (ItemViewHolder) convertView.getTag();
}
//Set values into view etc...
return convertView;
}
这很好用,但问题是:我怎么知道不再需要观察者?我想检测给定视图何时被销毁,以便从 Map 中获取观察者并将其从 Observable 对象中删除。当视图被销毁时,是否有任何监听器被调用?
我试过AbsListView.RecyclerListener.onMovedToScrapHeap(View view)
了,但它似乎在 View 被回收时被调用。
谢谢!