【发布时间】:2013-03-07 17:33:26
【问题描述】:
我有一个带有 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 被回收时被调用。
谢谢!
【问题讨论】:
-
聚会迟到但可能会帮助别人。适配器中的
onViewDetachedFromWindow(holder: RepositoryViewHolder)可以满足问题的要求。
标签: android listview adapter baseadapter