テキストビューと2つのイメージビューを含むrecyclerViewがあります。RecyclerViewをその行の項目クリックリスナーとその内部のビューの両方で処理する方法
ユーザーが各画像ビューをクリックしたときに、ユーザーが各行と別のタスクをクリックしたときにタスクを実行したいと思いますが、同時にそのうちの1つしか処理できません。
recylerview.addOnItemTouchListener
を設定した場合、ユーザーがイメージビューをクリックして行のクリックリスナーがトリガーするため、画像ビューonclicksをアダプタでclicklistener
に設定して処理できません。
はリサイクルビュー項目
public class RecyclerItemClickListener implements RecyclerView.OnItemTouchListener {
private OnItemClickListener mListener;
public interface OnItemClickListener {
public void onItemClick(View view, int position);
public void onLongItemClick(View view, int position);
}
GestureDetector mGestureDetector;
public RecyclerItemClickListener(Context context, final RecyclerView recyclerView, OnItemClickListener listener) {
mListener = listener;
mGestureDetector = new GestureDetector(context, new GestureDetector.SimpleOnGestureListener() {
@Override
public boolean onSingleTapUp(MotionEvent e) {
return true;
}
@Override
public void onLongPress(MotionEvent e) {
View child = recyclerView.findChildViewUnder(e.getX(), e.getY());
if (child != null && mListener != null) {
mListener.onLongItemClick(child, recyclerView.getChildAdapterPosition(child));
}
}
});
}
@Override public boolean onInterceptTouchEvent(RecyclerView view, MotionEvent e) {
View childView = view.findChildViewUnder(e.getX(), e.getY());
if (childView != null && mListener != null && mGestureDetector.onTouchEvent(e)) {
mListener.onItemClick(childView, view.getChildAdapterPosition(childView));
return true;
}
return false;
}
@Override public void onTouchEvent(RecyclerView view, MotionEvent motionEvent) { }
@Override
public void onRequestDisallowInterceptTouchEvent (boolean disallowIntercept){}
を処理するための私のクラスであり、これはアダプタ
public MyViewHolder(View view) {
super(view);
tv_word = (TextView) view.findViewById(R.id.tv_word_show);
tv_english = (TextView) view.findViewById(R.id.tv_english_show);
tv_translation = (TextView) view.findViewById(R.id.tv_tranlation_show);
tv_numbershow = (TextView) view.findViewById(R.id.tv_numershow);
fav = (ImageView) view.findViewById(R.id.iv_fav);
more = (ImageView) view.findViewById(R.id.iv_more);
fav.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Toast.makeText(mContext,"show some text for test",Toast.LENGTH_LONG).show();
}
});
内部の私のホルダーである私は私の問題
こんにちは、私の質問に答えるためPreetika KaurさんののTaNxは、私はそれのアイデアを得たが、私はholder.view.setOnclickListener(新しいOnclickListener( @Override ます。public void onClickの(ビューV){ かの宣言shoudはどこで取得できませんでした(!clickListener = NULL){ clickListener.ItemClicked(V、getAdapterPosition()); } } );私のアダプタで –
はい、あなたはbindviewholder上のアダプタのビューでこれを追加する必要があります()親切に答えをupvoteそれがあなたに役立つならば –
tanxもう一度私はそれを見てすぐにあなたのansewerをupvotedしかし、私はなぜそれがdosenを示すのかわからない:(それは15未満の評判でthosによって投げられた投票が記録されているがn変更後の公開ポストスコアを表示します。 ty any wayy –