2016-12-17 6 views

答えて

6

使用するために、あなたの活動に、このコードでRecyclerItemClickListener

class RecyclerItemClickListener implements RecyclerView.OnItemTouchListener { 
private OnItemClickListener mListener; 

interface OnItemClickListener { 
    void onItemClick(View view, int position); 
} 

private GestureDetector mGestureDetector; 

RecyclerItemClickListener(Context context, OnItemClickListener listener) { 
    mListener = listener; 
    mGestureDetector = new GestureDetector(context, new GestureDetector.SimpleOnGestureListener() { 
     @Override 
     public boolean onSingleTapUp(MotionEvent e) { 
      return true; 
     } 
    }); 
} 

@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 false; 
} 

@Override 
public void onTouchEvent(RecyclerView view, MotionEvent motionEvent) { 
} 

@Override 
public void onRequestDisallowInterceptTouchEvent(boolean disallowIntercept) { 

} 
} 

という名前のクラスを定義し、RecyclerViewは、ListViewコントロールのように任意のlistenersを持っていません。したがって、RecyclerView.OnItemTouchListenerを拡張して独自のクラスを作成する必要があります。

活動に続いてRecyclerTouchListener.java

import android.content.Context; 
import android.support.v7.widget.RecyclerView; 
import android.view.GestureDetector; 
import android.view.MotionEvent; 
import android.view.View; 

public class RecyclerTouchListener implements RecyclerView.OnItemTouchListener { 

    private GestureDetector gestureDetector; 
    private ClickListener clickListener; 

public RecyclerTouchListener(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 true; 

     } 

     @Override 
     public void onLongPress(MotionEvent e) { 

      View child = recyclerView.findChildViewUnder(e.getX(), e.getY()); 

      if (child != null && clickListener != null) { 

       clickListener.onLongClick(child, recyclerView.getChildPosition(child)); 

      } 
     } 
    }); 
} 

@Override 
public boolean onInterceptTouchEvent(RecyclerView rv, MotionEvent e) { 

    View child = rv.findChildViewUnder(e.getX(), e.getY()); 

    if (child != null && clickListener != null && gestureDetector.onTouchEvent(e)) { 

     clickListener.onClick(child, rv.getChildPosition(child)); 

    } 
    return false; 
} 

@Override 
public void onTouchEvent(RecyclerView rv, MotionEvent e) { 
} 

@Override 
public void onRequestDisallowInterceptTouchEvent(boolean disallowIntercept) { 

} 

public interface ClickListener { 

    void onClick(View view, int position); 

    void onLongClick(View view, int position); 
    } 
} 

クラスを作成し、onClickメソッドをオーバーライドします。

recyclerView.addOnItemTouchListener(new RecyclerTouchListener(context, recyclerView, new RecyclerTouchListener.ClickListener() { 
     @Override 
     public void onClick(View view, int position) { 

     // Toast.makeText(getActivity(), position+ " is selected successfully", Toast.LENGTH_SHORT).show(); 

       //handle click event 

     } 

     @Override 
     public void onLongClick(View view, int position) { 

     } 
    })); 

このようにして、recyclerview item click eventを処理できます。

+0

... @ Vinoth Vino –

+0

私の答えがあなたを親切に受け入れることができれば。ハッピーコーディング... :) @SabirHossain –

2

は、このコードのAndroidで

recyclerView.addOnItemTouchListener(new RecyclerItemClickListener(MainActivity.this, new RecyclerItemClickListener.OnItemClickListener() { 
      @Override 
      public void onItemClick(View view, int position) { 

      } 
     })); 
+0

ありがとう@ Amir_P –

関連する問題