我在我的应用程序项目中使用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? - 或者,我不需要这样做?
答案 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)