检测适配器上的项目视图已被破坏

iva*_*acf 3 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;
    }
Run Code Online (Sandbox Code Playgroud)

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

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

谢谢!

Hug*_*sse 5

根据这个官方问题onViewDetachFromWindowBUT 出现问题

在这种情况下,不一定会调用onDetachedFromWindow()。ListView子级被回收再利用,并且ListView尽可能避免不必要的onDetachedFromWindow()。
但是,在销毁Activity或从窗口分离ListView时,应为适配器创建的所有视图调用onDetachedFromWindow()。

因此,您不能期望listview视图被破坏。

  • 我喜欢拒绝投票,任何评论<3 (6认同)