Arjun Issar
Arjun Issar

Reputation: 654

Making a RecyclerView interactive

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

Answers (3)

mominapk
mominapk

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

Sourabh Bans
Sourabh Bans

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

N J
N J

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

Related Questions