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

标签 android listview adapter baseadapter

我有一个带有 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 this situation. ListView children are recycled and reused, and ListView avoids unnecessary onDetachedFromWindow() whenever possible.
However, onDetachedFromWindow() should be called for all views created by the adapter when the Activity is destroyed or when ListView is detached from the window.

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

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

相关文章:

android - Android 4.x 微调器中不再有提示了吗?

android - 为 Android 应用程序创建 3D 动画

android - 为什么 PagerAdapter 的 restoreState() 和 saveState() 不起作用?

asp.net - 将图像与 anchor 文本对齐?

java - ListView 滚动时仅显示行

android - 在 ViewPager 中动态添加和删除 fragment

android - 更改 Android 中的媒体音量?

javascript - 在 jQuery Mobile 中动态构建可折叠数据集的技术是什么

java - Android:自定义ListView不会立即填充

android - 回收具有不同行布局的 ListView 行