Skip to content

Instantly share code, notes, and snippets.

@klanjabrik
Created June 25, 2015 05:02
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save klanjabrik/abded9b317914c71f24f to your computer and use it in GitHub Desktop.
Save klanjabrik/abded9b317914c71f24f to your computer and use it in GitHub Desktop.
RecyclerItemClickListener (onItemClick & onItemLongClick)
public class MainActivity extends AppCompatActivity {
private RecyclerView.LayoutManager myLayoutManager;
private static RecyclerView myRecyclerView;
@Override
protected void onCreate(Bundle savedInstanceState) {
...
myRecyclerView = (RecyclerView) findViewById(R.id.my_recycler);
myRecyclerView.setHasFixedSize(true);
myLayoutManager = new LinearLayoutManager(this);
myRecyclerView.setLayoutManager(myLayoutManager);
myRecyclerView.setItemAnimator(new DefaultItemAnimator());
myRecyclerView.addItemDecoration(new DividerDecoration(this));
myRecyclerView.addOnItemTouchListener(new RecyclerItemClickListener(getApplicationContext(),
myRecyclerView, new RecyclerItemClickListener.OnItemClickListener() {
@Override
public void onItemClick(View view, int position) {
Log.d(TAG, "onItemClick");
}
@Override
public void onItemLongClick(View view, int position) {
Log.d(TAG, "onItemLongClick");
}
}));
...
}
}
public class RecyclerItemClickListener implements RecyclerView.OnItemTouchListener
{
public static interface OnItemClickListener
{
public void onItemClick(View view, int position);
public void onItemLongClick(View view, int position);
}
private OnItemClickListener mListener;
private 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 childView = recyclerView.findChildViewUnder(e.getX(), e.getY());
if(childView != null && mListener != null)
{
mListener.onItemLongClick(childView, recyclerView.getChildPosition(childView));
}
}
});
}
@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.getChildPosition(childView));
}
return false;
}
@Override
public void onTouchEvent(RecyclerView view, MotionEvent motionEvent){}
@Override
public void onRequestDisallowInterceptTouchEvent(boolean disallowIntercept) {
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment