Tushar
Tushar

Reputation: 1122

Onclicklistener not working on recyclerview

I am working with recyclerview the same code given below was working fine for me but I have tried following code but it is not working

recyclerView = (RecyclerView)v.findViewById(R.id.datelist);
    recyclerView.setClickable(true);
    recyclerView.setLayoutManager(new LinearLayoutManager(getActivity()));
    recyclerView.setAdapter(adapter);
    adapter.setOnItemClickListener(this);

in the Adapter

public  class UpdateHolder extends RecyclerView.ViewHolder
            implements View
            .OnClickListener,CompoundButton.OnCheckedChangeListener {
        TextView uname;
        TextView uversn;
        TextView usitting;


        public UpdateHolder(View itemView) {
            super(itemView);
            uname = (TextView) itemView.findViewById(R.id.update_name);
            uversn = (TextView) itemView.findViewById(R.id.update_version);
            usitting=(TextView) itemView.findViewById(R.id.sitting_type);

            Log.i(LOG_TAG, "Adding Listener");
            itemView.setOnClickListener(this);
        }

        @Override
        public void onClick(View v) {

            myClickListener.onItemClick(getPosition(), v);
        }
}
public void setOnItemClickListener(MyClickListener myClickListener) {
        this.myClickListener = myClickListener;
    }

I have also tried the in Adapter in onCreateViewHolder

Please help me out

Upvotes: 7

Views: 6676

Answers (2)

Neutrino
Neutrino

Reputation: 781

For me, the solution was to remove the below from the CardView xml file.

android:clickable="true"

Apparently, this attribute overrides any clickListeners added to the view.

Upvotes: 16

Darshan Mistry
Darshan Mistry

Reputation: 3372

In recyclerView you have to create viewHolder like below code, you have to set click listener on viewHolder View as seen in below.

public static class ViewHolder extends RecyclerView.ViewHolder {
        private final TextView textView;
        private final MyEditText edtTest;

        public ViewHolder(View v) {
            super(v);
            // Define click listener for the ViewHolder's View.
            v.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    Log.d(TAG, "Element " + getPosition() + " clicked.");
                }
            });
            v.setOnLongClickListener(new View.OnLongClickListener() {
                @Override
                public boolean onLongClick(View v) {
                    Log.e("Demo", "Long click done bro--------------------->");
                    return false;
                }
            });
            textView = (TextView) v.findViewById(R.id.textView);
            edtTest = (MyEditText) v.findViewById(R.id.edtTest);
        }

        public TextView getTextView() {
            return textView;
        }

        public EditText getEdtTest() {
            return edtTest;
        }
    }

Upvotes: 3

Related Questions