0

まず、私は長い間この問題に苦しんでいます。私は物事を把握する方法を知らないので、私はこれらのステップとチュートリアルを運行なしで続けました。recyclerviewをクリックする方法は?

  1. Click through recycler view empty space
  2. Click through a recyclerview list item

とStackOverflowの上の質問の束。私は自分のコードも書きました。私は愚かなことをしているかもしれませんが、それを理解することはできません。

mRecyclerView.setOnTouchListener((v, event) -> { 
    RectF rectf = new RectF((int) event.getX(), 
          (int) event.getY(), 
          0, 0); 
    boolean contains = getCenter(mHeaderPopUp).contains(rectf); 
    if (contains) { 
     Toast.makeText(mContext, "Clicked", Toast.LENGTH_SHORT).show(); 
    } 
    return false; 
}); 

private RectF getCenter(View view) { 
    Rect rect = new Rect(); 
    view.getLocalVisibleRect(rect); 
    RectF dimens = new RectF((rect.left + rect.width()/2), 
          (int) (rect.top + rect.height()/2), 
          0, 0); 
    return dimens; 
} 

は、だから今、私はこれらの事のすべてを試してみましたが、私はあなたが下の画像で見ることができるrecyclerviewを下回っているビューにrecyclerviewてクリックすることはできませんよ。 recyclerviewは画面上のすべてのビューをオーバーレイし、その下をクリックする必要があります。私はrecyclerviewの上にそれらのビューを配置したくないので、recyclerviewをスクロールするとアニメーション化され、そのアイテムですべてのビューをカバーします。 ありがとうございます。 This is the image

+0

をクリックして、あなたのRecyclerViewのためのトップマージンを定義する必要がありますrecyclerView下記の図である

public class RecyclerTouchEvent implements RecyclerView.OnItemTouchListener { private GestureDetector gestureDetector; ClickListener clickListener; public RecyclerTouchEvent(Context context, final RecyclerView recyclerView, final ClickListener clickListener) { this.clickListener = clickListener; gestureDetector = new GestureDetector(context, new GestureDetector.SimpleOnGestureListener() { @Override public boolean onSingleTapUp(MotionEvent e) { return super.onSingleTapUp(e); } @Override public void onLongPress(MotionEvent e) { super.onLongPress(e); } }); } @Override public boolean onInterceptTouchEvent(final RecyclerView rv, MotionEvent e) { final View childView = rv.findChildViewUnder(e.getX(), e.getY()); if (childView != null && clickListener != null) { clickListener.onClick(childView); }else if (childView==null&&clickListener!=null){ clickListener.onOutsideClick(e); } return false; } @Override public void onTouchEvent(RecyclerView rv, MotionEvent motionEvent) { } @Override public void onRequestDisallowInterceptTouchEvent(boolean disallowIntercept) { } } public static interface ClickListener { public void onClick(View view); public void onOutsideClick(MotionEvent event); } 

recyclerViewLends.addOnItemTouchListener(new RecyclerTouchEvent(getContext(), recyclerViewLends, new ClickListener() { @Override public void onClick(View view) { } @Override public void onOutsideClick(MotionEvent e) { rippleLayoutAddLend.dispatchTouchEvent(e); } })); 

コード

です。その後、RecyclerViewの上の画像はクリック可能です –

+0

あなたは私の推測を得ていませんでした – George

答えて

0

私はそれを見つけたと思う。

使用recycler.setLayoutFrozen(true);

あなたはまだあなたの項目にonClickListenersを割り当てることができますが、そうでない場合は、クリックして行きます。 RecyclerView.javaのソースコードから

@Override 
public boolean onTouchEvent(MotionEvent e) { 
    if (mLayoutFrozen || mIgnoreMotionEventTillDown) { 
     return false; // <= This will prevent the RecyclerView from getting the MotionEvent 
    } 
... 
} 

https://android.googlesource.com/platform/frameworks/support/+/refs/heads/master/v7/recyclerview/src/android/support/v7/widget/RecyclerView.java#2795

2

こんにちは私は答えを見つけました。 RecyclerViewの下にカードがあり、recyclerViewに左からパディングがあり、clipToFading = falseに設定されています。 recyclelerViewの下にカードを作成するにはRecyclerTouchイベントクラスを作成しました。クリックしたときchildViewがnullの場合、子どもと屋外の外にあり、私は自分のカードにタッチイベントを与えます。 ここrippleLayoutAddLendは両方RelativeLayoutに入れ

関連する問題