AHMET ZIYA YAVUZ
AHMET ZIYA YAVUZ

Reputation: 33

Handling items on RecyclerView OnClick Method

I am trying to make a biography app which includes cardviews. I can not achieve that when I click on each item on RecyclerView, second activity which contains of detail info must be opened. Here is my code. Where am I doing wrong? Thank you so much...

public class SimpleRecyclerAdapter extends RecyclerView.Adapter<SimpleRecyclerAdapter.ViewHolder>{

    private static final String TAG = "debug";
    private Context mContext;
    List<Person> list = new ArrayList<>();

    public SimpleRecyclerAdapter(Context mContext, List<Person>list){
    this.list=list;
    }

    public static class ViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener {

        public TextView person_name;
        public TextView person_year;
        public ImageView person_img;
        public CardView card_view;

        public ViewHolder(final View view) {
        super(view);

            card_view = (CardView) view.findViewById(R.id.card_view);
            person_name = (TextView) view.findViewById(R.id.person_name);
            person_year = (TextView) view.findViewById(R.id.person_year);
            person_img = (ImageView) view.findViewById(R.id.person_photo);

            view.setOnClickListener(this);

            view.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    Toast.makeText(v.getContext(), "inside viewholder position = " + getAdapterPosition(), Toast.LENGTH_SHORT).show();
                    Intent intent = new Intent(v.getContext(), DetailActivity.class);

                    v.getContext().startActivity(intent);
                }
            });

        }

        @Override
        public void onClick(View v) {

        }

    } // Closing inner class: Viewholder

    @Override
    public SimpleRecyclerAdapter.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
        // create a new view
        View v = LayoutInflater.from(parent.getContext()).inflate(R.layout.card_view_layout, parent, false);
        // create ViewHolder
        ViewHolder view_holder = new ViewHolder(v);
        return view_holder;
    }


    @Override
    public void onBindViewHolder(ViewHolder holder, int position) {

        holder.person_name.setText(list.get(position).getName());
        holder.person_year.setText(list.get(position).getYear());
        holder.person_img.setImageResource(list.get(position).getPhoto_id());
    }

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


    @Override
    public void onAttachedToRecyclerView(RecyclerView recyclerView) {
        super.onAttachedToRecyclerView(recyclerView);
    }
} // Closing outer class: SimpleRecyclerAdapter

Upvotes: 1

Views: 1089

Answers (3)

Pratik Surela
Pratik Surela

Reputation: 41

Remove this from ViewHolder class :

view.setOnClickListener(this);

        view.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Toast.makeText(v.getContext(), "inside viewholder position = " + getAdapterPosition(), Toast.LENGTH_SHORT).show();
                Intent intent = new Intent(v.getContext(), DetailActivity.class);

                v.getContext().startActivity(intent);
            }
        });

    }

    @Override
    public void onClick(View v) {

    }

And in onBindViewHolder(ViewHolder holder, int position) do like this :

        holder.card_view.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    Toast.makeText(mContext, "inside viewholder position = " + position, Toast.LENGTH_SHORT).show();
                    Intent intent = new Intent(mContext,DetailActivity.class);
                    mContext.startActivity(intent);
                }
            });

Upvotes: 0

bhumika rijiya
bhumika rijiya

Reputation: 440

In RecycleView, To get click iem of recycleview items for that You can get in activity in which you set recycle Adapter. Like this,

private RecycleAdapter adapter;

Adapter.SetOnItemClickListener(new Recycle_FrameAdapter.OnItemClickListener() {
        @Override
        public void onItemClick(View view, int position) {
           Toast.makeText(getApplicationContext(),""+position,Toast.LENGTH_SHORT).show();
        }
    });

I wish you can get click event of RecycleView...

Upvotes: 0

Collins Abitekaniza
Collins Abitekaniza

Reputation: 4578

You may have forgotten to add the clickable attribute to your parent row item layout.Try adding it like

android:clickable="true"

Also try to remove one of the onClickMethods on the view since you set it two times.

view.setOnClickListener(this);

And

view.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            Toast.makeText(v.getContext(), "inside viewholder position = " + getAdapterPosition(), Toast.LENGTH_SHORT).show();
            Intent intent = new Intent(v.getContext(), DetailActivity.class);

            v.getContext().startActivity(intent);
        }
    });

Upvotes: 2

Related Questions