Reputation: 654
How do I implement an OnClickListener
on a RecyclerView
??
Online tutorials show the implementation of OnItemTouchListener
, but they are a little vague. Could someone show the code for a simple implementation of touch interaction with a RecyclerView
.
One article i came across : http://sapandiwakar.in/recycler-view-item-click-handler/
This provides a vague picture of how to go about it, but could someone make things clear. Thanks.
Upvotes: 1
Views: 1164
Reputation: 81
You can use holder.root for item click in the customadapter
@Override
public void onBindViewHolder(final MyAdapter.ViewHolder1 holder, final int position) {
holder.root.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
//write your code here
}
});
}
and you have to use this
mRecyclerView.addOnItemTouchListener(new RecyclerView.OnItemTouchListener() {
@Override
public boolean onInterceptTouchEvent(RecyclerView recyclerView, MotionEvent motionEvent) {
child = recyclerView.findChildViewUnder(motionEvent.getX(),motionEvent.getY());
if(child!=null && mGestureDetector.onTouchEvent(motionEvent)){
//Drawer.closeDrawers();
//write your code here
return true;
}
if(txt!=null)
{
}
});
Upvotes: 1
Reputation: 3134
If you are using custom adapter then you can use OnClickListener method like this in your Holder class.
public class DataObjectHolder extends RecyclerView.ViewHolder {
TextView header , resp_id , time;
ImageView status,info,delete,upload;
public DataObjectHolder(View itemView) {
super(itemView);
header = (TextView) itemView.findViewById(R.id.header_text_inc);
resp_id = (TextView) itemView.findViewById(R.id.resp_text_inc);
time = (TextView) itemView.findViewById(R.id.time_text_inc);
delete =(ImageView)itemView.findViewById(R.id.delete_inc_image);
Log.e(LOG_TAG, "Adding Listener");
itemView.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
// do something here
}
});
delete.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
r_bean = mDataset.get(getAdapterPosition());
}
});
Upvotes: 2
Reputation: 27515
For RecyclerView
item OnItemTouchListener
is best way
But you can do it click on Item by following in adpter
@Override
public void onBindViewHolder(ViewHolder holder, int position) {
...
holder.itemView.setOnClickListener(..)
...
}
For swipe on RecyclerView
ItemTouchHelper.SimpleCallback simpleItemTouchCallback = new ItemTouchHelper.SimpleCallback(0, ItemTouchHelper.LEFT | ItemTouchHelper.RIGHT) {
@Override
public boolean onMove(RecyclerView recyclerView, RecyclerView.ViewHolder viewHolder, RecyclerView.ViewHolder viewHolder1) {
return false;
}
@Override
public void onSwiped(RecyclerView.ViewHolder viewHolder, int swipeDir) {
//Remove swiped item from list and notify the RecyclerView
if (swipeDir == ItemTouchHelper.LEFT) {
Snackbar.make(recyclerViewCards, getString(R.string.item_deleted),
Snackbar
.LENGTH_LONG)
.show();
showVisitingCardsPresenterImpl.detletCardFromRealm(Realm.getInstance
(ShowVisitingCardsActivity.this), mAdapter.getID(viewHolder
.getAdapterPosition()), viewHolder
.getAdapterPosition()
);
} else {
showVisitingCardsPresenterImpl.startVisitingCardUpdateActivity(mAdapter.getID(viewHolder
.getAdapterPosition()));
}
}
};
see this link for complete left-to-right and right-to-left swipe detection
Upvotes: 1