如何在处理它们时从RecyclerView的ViewHolders中删除OnClickListeners?

hat*_*ata 16 android onclicklistener android-recyclerview

我在我的应用程序项目中使用RecyclerViews并使用ViewHolders设置OnClickListeners(在StackOverflow Q&A中提到的构造函数中).

然后我有了这个问题:如何处理它们时从RecyclerView的ViewHolders中删除OnClickListeners.

通常,我们可以通过执行以下操作来删除OnClickListener:

view.setOnClickListener(null);
Run Code Online (Sandbox Code Playgroud)

如果它是ViewPager的PagerAdapter,我们可以在destroyItem方法中这样做.

@Override
public void destroyItem(ViewGroup container, int position, Object object) {
    View view = container.findViewById(R.id.viewId);
    view.setOnClickListener(null);
}
Run Code Online (Sandbox Code Playgroud)

我在哪里可以使用RecyclerView?- 或者,我不需要这样做?

cgr*_*cgr 20

如果要在视图离开屏幕时将null设置为RecyclerView.Adapter视图的onCLickListener(),可以通过覆盖http://developer.android.com/reference/android/support/v7/来设置您的recyclerView适配器中的widget/RecyclerView.Adapter.html#onViewDetachedFromWindow(VH).您将收到持有者作为刚刚离开屏幕的参数.您可以为该持有者中的任何可用视图设置onClickListener.

或者,如果您只是想在屏幕上显示时也这样做,则可以在onBindViewHolder()中执行.但这没有意义,因为你可以避免设置监听器.

要记住的要点,与此答案相关:
如果您不想设置单击侦听器以查看每个数据集但只有少数几个,则可能需要将侦听器设置为null.在这种情况下,最好将listenrs设置为null,当它们离开屏幕时.否则,由于RecyclerView将重新使用(回收)已消失的持有者对象,以表示变得可见的新数据集.在此过程中,未设置侦听器的数据集(在持有者中查看)可能因为回收而设置了侦听器.

总而言之,在获得由于回收而平滑滚动的优势的同时,我们有责任重置视图(清除图像视图,文本视图等)和null设置onCLickListener等.