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

时间:2015-11-21 17:42:27

标签: android android-recyclerview onclicklistener

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

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

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

view.setOnClickListener(null);

如果它是ViewPager的PagerAdapter,我们可以用destroyItem方法完成。

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

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

2 个答案:

答案 0 :(得分:18)

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

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

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

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

答案 1 :(得分:2)

如果您使用RecyclerView并将OnClickListener绑定到每个行根视图,则无需处置它们。

但如果某些观点不应对点击事件做出响应,则只需使用setOnClickListener(null)

相关问题