RecyclerView OnBindViewHolder 对某些回收行调用超过 1 次

RecyclerView OnBindViewHolder called more then 1 times for some recycle rows

提问人:Unnamed 提问时间:12/23/2017 最后编辑:Gholamali IraniUnnamed 更新时间:12/24/2017 访问量:1182

问:

我想澄清回收在一个方向上滚动时的行为,例如从上到下。 正如我所看到的,即使我们每次都只向下滚动,也可以为某些行调用几次。下面,我列出了带有手机号码的通话记录:OnBindViewHolderOnBindViewHolder

1,
2,
3,
4,
5,
6,
7,
8,
3,
4,
5,
6...

这是意料之中的吗?

如果是这样,我需要将单元格外观动画放在什么位置?在这种情况下,当我放入动画时,我的动画也会播放几次。该目标的常见方法是什么? 谢谢。OnBindViewHolder

Xamarin Android-RecyclerView

评论

0赞 kalabalik 12/24/2017
究竟什么是单元格外观动画?它是否总是在单元格可见时触发,还是仅在第一次出现时触发?当细胞仅部分可见或完全可见时,它会触发吗?
0赞 Unnamed 12/24/2017
每当单元格变为可见时,都会触发动画。目前,没有检查单元格的部分或全部可见性,因此当单元格出现在屏幕上时,动画会立即开始播放。但这是我的下一个目标,只有在单元格完全可见之后才播放动画。
0赞 kalabalik 12/24/2017
所以你已经在检查一个单元格何时变得可见,对吧?然后在那里触发动画。还是我误会了?
0赞 Unnamed 12/24/2017
是的,你是对的。
0赞 Unnamed 12/24/2017
@kalabalik,谢谢你的帮助,更准确地回答你的问题:“所以你已经在检查一个单元格何时变得可见,对吧? - 现在,我每次工作时都会播放动画OnBindViewHolder

答:

0赞 kalabalik 12/24/2017 #1

这适用于检测新的部分可见项目视图:

recyclerView.addOnChildAttachStateChangeListener(new RecyclerView.OnChildAttachStateChangeListener() {
        @Override
        public void onChildViewAttachedToWindow(final View view) {
            view.setBackgroundColor(0xffff0000);
            view.postDelayed(new Runnable() {
                @Override
                public void run() {
                    view.setBackgroundColor(0xff00ff00);
                }
            }, 2000);
        }

        @Override
        public void onChildViewDetachedFromWindow(View view) {

        }
    });

检测新的完全可见的项目视图更为复杂。您需要使用 and 查找以下两个调用结果的更改:OnScrollListener

layoutManager.findFirstCompletelyVisibleItemPosition();

layoutManager.findLastCompletelyVisibleItemPosition();

如果我没记错的话,您需要跟踪那些可见且已触发动画的项目。