gpt4 book ai didi

android - 检测适配器上的项目 View 已被破坏

转载 作者:太空宇宙 更新时间:2023-11-03 12:37:33 25 4
gpt4 key购买 nike

我有一个带有 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;
}

这很好用,但问题是:我怎么知道不再需要观察者?我想检测给定 View 何时被销毁,以便从 Map 获取观察者并将其从 Observable 对象中删除。 View 被销毁时是否会调用任何监听器?

我尝试了 AbsListView.RecyclerListener.onMovedToScrapHeap(View view) 但它似乎是在回收 View 时调用的。

谢谢!

最佳答案

根据 this offical issue , onViewDetachFromWindow 但是有问题

onDetachedFromWindow() will not necessarily be called in thissituation. ListViewchildren are recycled and reused, and ListView avoids unnecessaryonDetachedFromWindow() whenever possible.
However, onDetachedFromWindow()should be called for all views created by the adapter when the Activity is destroyed orwhen ListView is detached from the window.

所以你不能指望 ListView View 被销毁。

关于android - 检测适配器上的项目 View 已被破坏,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15277922/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com