GeekWithGlasses
GeekWithGlasses

Reputation: 602

Android - Recycler View onClick Listener not Working

I have made a RecyclerView adapter and using that adapter to inflate data in recycler view , I previously used the general Method of ListView onItemClickListner but it doesn't seems to work with RecyclerView , Plese anyone help me out with this

My RecyclerView Adapter class is :

public class TimeAdaptra extends      
RecyclerView.Adapter<TimeAdaptra.RecyclerViewHolder> {
ArrayList<String> time, status;

public TimeAdaptra(ArrayList<String> title, ArrayList<String> dec) {
    this.time = title;
    this.status = dec;

}

@Override
public RecyclerViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
    View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.time_slice, parent, false);
    RecyclerViewHolder recyclerViewHolder = new RecyclerViewHolder(view);
    return recyclerViewHolder;
}

@Override
public void onBindViewHolder(RecyclerViewHolder holder, int position) {
    holder.myTitle.setText(time.get(position));
    holder.mydec.setText(status.get(position));
}

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

public static class RecyclerViewHolder extends RecyclerView.ViewHolder {
    TextView myTitle;
    TextView mydec;

    public RecyclerViewHolder(View view) {
        super(view);
        myTitle = (TextView) view.findViewById(R.id.timee);
        mydec = (TextView) view.findViewById(R.id.status);
    }
}
}

And I am doing inflation like this :

public class Slots extends AppCompatActivity {
RecyclerView recyclerView;
RecyclerView.Adapter adapter;
RecyclerView.LayoutManager manager;
private ArrayList<String> Time = new ArrayList<String>();
private ArrayList<String> Status = new ArrayList<String>();


@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_slots);

    Time.add("18:00");
    Status.add("Available");
    recyclerView = (RecyclerView) this.findViewById(R.id.timeslice);
    manager = new LinearLayoutManager(this);
    recyclerView.setLayoutManager(manager);
    recyclerView.setHasFixedSize(true);
    adapter = new TimeAdaptra(Time, Status);
    recyclerView.setAdapter(adapter);
    adapter.notifyDataSetChanged();

Upvotes: 1

Views: 777

Answers (1)

Nongthonbam Tonthoi
Nongthonbam Tonthoi

Reputation: 12963

Make the RecyclerViewHolder implement View.OnClickListener like this:

  public static class RecyclerViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener{
        TextView myTitle;
        TextView mydec;

        public RecyclerViewHolder(View view) {
            super(view);
            myTitle = (TextView) view.findViewById(R.id.timee);
            mydec = (TextView) view.findViewById(R.id.status);
            myTitle.setOnClickListener(this);
            mydec.setOnClickListener(this);

        }

            @Override
            public void onClick(View v) {
                switch (v.getId()) {
                    case R.id.timee:
                   // do task
                    break;
                    case R.id.status:
                    //do task
                    break;
                    }
          }
    }

If you want to click on each item of the list then you should get the id of the root layout of the xml your are inflating and setOnClickListener() to it.

Upvotes: 1

Related Questions