0

I wanna implement both OnItemClickListener and OnItemLongClickListener on my Recycler View. I use the Android library BRVAH to set up the Adapter.

I'm expecting a custom declaration of OnItemLongClickListener, so that I could put it on my (already implemented), OnItemClickListener.

    mAdapter.setOnItemClickListener(new BaseQuickAdapter.OnItemClickListener() {
        public void onItemClick(BaseQuicAdapter adapter, final View view, int position) {
        .....
        }
    });
  • now to u want to **`OnItemLongClickListener`** ? – Ali Apr 19 '18 at 05:27
  • Possible duplicate of [Android | AlertDialog on RecyclerView Item Click](https://stackoverflow.com/questions/45438215/android-alertdialog-on-recyclerview-item-click) – AskNilesh Apr 19 '18 at 05:28
  • I wanna implement both **OnItemLongClickListener** and **OnItemClickLiistener**, but when I implemented **OnItemLongClickListener**, my **OnItemClickListener** stopped working. –  Apr 19 '18 at 05:31
  • You probably should set the listener to the RecyclerView, not to the adapter. – Vladyslav Matviienko Apr 19 '18 at 05:33
  • @ThawinduAngeshTuto check this ans https://stackoverflow.com/a/45438292/7666442 – AskNilesh Apr 19 '18 at 05:39

3 Answers3

1

you have to make two interfaces to handle click event and long click event into the adapter for recyclview.

Like make below interface into adapter class..

onItemClickListner onItemClickListner;
onItemLongClickListner onItemLongClickListner;

public void setOnItemLongClickListner(RecyclerViewAdpater.onItemLongClickListner onItemLongClickListner) {
    this.onItemLongClickListner = onItemLongClickListner;
}

public void setOnItemClickListner(RecyclerViewAdpater.onItemClickListner onItemClickListner) {
    this.onItemClickListner = onItemClickListner;
}

public interface onItemClickListner {
    void onClick(String str);//pass your object types.
}
public interface onItemLongClickListner{
    void onLongClick(String str);
}
@Override
public void onBindViewHolder(ItemViewHolder holder, int position) {
    String data = mStringList.get(position); // if you pass object of class then create that class object.
    holder.textView.setText(data);
    // below code handle click event on recycler view item.
    holder.itemView.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            onItemClickListner.onClick(data);
        }
    });
    holder.itemView.setOnLongClickListener(new View.OnLongClickListener() {
        @Override
        public boolean onLongClick(View view) {
            onItemLongClickListner.onLongClick("Hiii");
            return false;
        }
    });
}

then after in activity when define recycler view after adapter define and bind into recycler view then get both click event like below ..

recyclerViewAdpater.setOnItemClickListner(new RecyclerViewAdpater.onItemClickListner() {
        @Override
        public void onClick(String str) {
            Toast.makeText(getApplicationContext(),"Value of Click"+str,Toast.LENGTH_SHORT).show();
        }
    });
    recyclerViewAdpater.setOnItemLongClickListner(new RecyclerViewAdpater.onItemLongClickListner() {
        @Override
        public void onLongClick(String str) {
            Toast.makeText(getApplicationContext(),"Value of Long Click"+str,Toast.LENGTH_SHORT).show();

        }
    });
0

You can use the following method of the library.

   /**
     * Register a callback to be invoked when an item in this RecyclerView has
     * been long clicked and held
     *
     * @param listener The callback that will run
     */
    public void setOnItemLongClickListener(OnItemLongClickListener listener) {
        mOnItemLongClickListener = listener;
    }

So to implement it in your code

    mAdapter.setOnItemLongClickListener(new BaseQuickAdapter.OnItemLongClickListener() {
    boolean onItemLongClick(BaseQuickAdapter adapter, View view, int position) {
    .....
    }
Raj Suvariya
  • 1,592
  • 3
  • 14
  • 36
0

Go into your adapter and find ViewHolder class and write following code

  public class MyViewHolder extends RecyclerView.ViewHolder{

        public MyViewHolder(View itemView) {
            super(itemView);

            itemView.setOnClickListener(new OnClickListener() {
                @Override
                public void onClick(View view) {
                    //call onClick handler here  
                }
            });

            itemView.setOnLongClickListener(new OnLongClickListener() {
                @Override
                public boolean onLongClick(View view) {
                    //call onLongClick handler here                        //Here you will return true
                    return true;
                }
            });

        }
    }

then create two interface like

 public interface OnMyLongClickListener{
        void onLongClick(int pos);
    }
    public interface OnMyClickClickListener{
        void onClick(int pos);
    }

implement these two interfaces in your activity or fragment class and then call these interfaces methods in receptive events

Umair Khalid
  • 2,259
  • 1
  • 21
  • 28