私はアプリプロジェクトでRecyclerViewsを使用していて、(StackOverflow Q&A で言及されているようなコンストラクターで)ViewHoldersでOnClickListenersを設定しています。
次に、この質問があります: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を使用してどこでできますか? -または、そうする必要はありませんか?
ビューが画面から消えたときにRecyclerView.AdapterのビューのonCLickListener()をnullに設定したい場合は、 http://developer.Android.com/reference/Android/ recyclerViewのアダプターのsupport/v7/widget/RecyclerView.Adapter.html#onViewDetachedFromWindow(VH) 画面から消えたばかりのパラメーターとしてホルダーを受け取ります。そのホルダーで使用可能な任意のビューのonClickListenerをnullに設定できます。
または、画面に表示されたときに同じようにしたい場合は、onBindViewHolder()で行うことができます。ただし、リスナーの設定を回避できるため、これは意味がありません。
この回答に関連して覚えておくべきポイント:
すべてのデータセットに対して表示するようにクリックリスナーを設定するのではなく、少数に設定する場合は、リスナーをnullに設定することが必要になる場合があります。この場合、リスナーが画面から消えたときは常にnullに設定することをお勧めします。そうでない場合、RecyclerViewは、表示されている新しいデータセットを表すために削除されたホルダーオブジェクトを再利用(リサイクル)するためです。このプロセスでは、リスナーを設定しなかったデータセット(ホルダー内のビュー)は、リサイクルのためにリスナーセットを持っている可能性があります。
全体として、リサイクルによるスムーズなスクロールの利点を得ながら、ビュー(画像ビュー、テキストビューなどをクリアする)とonCLickListenerなどをnullに設定することは、開発者の責任です。
RecyclerView
を使用し、OnClickListener
sをすべての行ルートビューにバインドしている場合、それらを破棄する必要はありません。
ただし、一部のビューがクリックイベントに応答しない場合は、setOnClickListener(null)
を使用します。