Monday, 2 July 2018

Setting onClickListener on RecyclerView itself not on item

I want to set onClickListener in a RecyclerView, not on its items. So if the user clicks on the Recyclerview it triggers a click event (Even if it is empty RecyclerView or full of items).

  • I'm using MVVM.
  • I tried mRecyclerView.setClickable(true), not working;

What I wanted

mRecyclerView.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
        }
    });

My Adapter Class

public class TaskItemAdapter extends RecyclerView.Adapter<TaskItemAdapter.BaseItemAdapterViewHolder> {
private static final String TAG = TaskItemAdapter.class.getSimpleName();
private List<Task> mTaskList;
private View.OnLongClickListener mOnLongClickListener;

public TaskItemAdapter(List<Task> taskList, View.OnLongClickListener longClickListener) {
    mTaskList = taskList;
    mOnLongClickListener = longClickListener;
}

@NonNull
@Override
public BaseItemAdapterViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
    if (parent instanceof RecyclerView) {
        int layoutId = R.layout.item_list_main;
        View view = LayoutInflater.from(parent.getContext()).inflate(layoutId, parent, false);
        view.setFocusable(true);
        return new BaseItemAdapterViewHolder(view);

    } else {
        throw new RuntimeException(TAG + "Not bound to recyclerView");
    }
}

@Override
public void onBindViewHolder(@NonNull BaseItemAdapterViewHolder holder, int position) {
    Task task = mTaskList.get(position);
    holder.mItemTextView.setText("- " + task.getName());

    holder.itemView.setTag(task);
    holder.itemView.setOnLongClickListener(mOnLongClickListener);

}

@Override
public int getItemCount() {
    return mTaskList.size();
}

public void loadItems(List<Task> taskList) {
    mTaskList = taskList;
    notifyDataSetChanged();
}


public class BaseItemAdapterViewHolder extends RecyclerView.ViewHolder {
    @BindView(R.id.item_textView)
    TextView mItemTextView;

    public BaseItemAdapterViewHolder(View view) {
        super(view);
        ButterKnife.bind(this, view);

    }

}

}



from Setting onClickListener on RecyclerView itself not on item

No comments:

Post a Comment