RecyclerView
をクリック不可能にすることは可能ですか?私のRecyclerView
は、clickableCardView
内にいくつかの小さなアイコンを表示するだけなので、これが必要です。したがって、誰かがアイコンをタップした場合は、代わりに親CardView
をクリック(およびアニメーション)するだけです。
私は以下を試しました:
recyclerView.setClickable(false);
recyclerView.setFocusable(false);
RecyclerView
を拡張し、onTouchEvent(MotionEvent)
がfalse
を返すようにします。RecyclerView
アダプターでitemView.setClickable(false);
を使用します。これは機能し、クリックは親に送信されます。ただし、RecyclerView
はスクロールできなくなりました。clickable="false"
_、_focusable="false"
_、_focusableInTouchMode="false"
_を設定します。 (コメントを参照@ Ibrahim)recyclerView#setLayoutFrozen(true)
およびitemView.setClickable(false);
を呼び出します。これは機能しますが、#4と同じ問題があります。RecyclerView
のクリックイベントを無効にして親ビューに渡す方法はありますか? RecyclerView
は依然としてスクロール可能(水平)である必要があることに注意してください。
編集:
ユーザー @ c.dunlap OnClickリスナーをアイコンに設定し、クリックを親のクリックアクションに「リダイレクト」することをお勧めします。これは機能しますが、親ビューにクリックアニメーションはありません。また、誰かがitemViewの外側をクリックしても、RecyclerView
の内側(たとえば、ItemDecorationパディング)をクリックした場合、クリックは検出されません。残念ながら、これは解決策ではありません。
親ビューを拡張し、クリックをインターセプトして、recyclerviewがそれを受信しないようにする必要があります。
@Override
public boolean onInterceptTouchEvent(MotionEvent ev) {
return true;
}
クレジット: ソリューション
このようなことを処理するための私の好ましい方法は、リサイクラービューの各アイコンがクリックされたときに呼び出されるアダプターからリスナーをアタッチすることです。その後、あなたの活動は適切な方法で対応することができます。例えば:
_public class MyAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder> {
private MyAdapterListener mListener;
public void onBindViewHolder(RecyclerView.ViewHolder holder, int position) {
holder.itemView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
mListener.iconClicked();
}
});
}
public void setListener(MyAdapterListener listener) {
mListener = listener;
}
public interface MyAdapterListener {
void iconClicked();
}
}
_
次に、アクティビティでMyAdapterListenerのインスタンスを作成し、それをリサイクラービューのアダプターのリスナーとして設定します。次に、iconClicked()
関数がトリガーされたときに、親クリックで実行されるコードを実行します。