Search code examples
androidandroid-recyclerviewonclicklistener

Android RecyclreView OnCLick Listener


Error on android recyclerView Adapter. App will stop working while click on RecyclerView items. I want to go other activity when click any items, when i'm using Toast it working fine but if i add Intent then it stop working.

Here is my Interface :

public interface OnItemClickListener {
        void onClick(View view, int position);
}

here is my recycler Adapter calss :

public class RecAdapter extends RecyclerView.Adapter<RecAdapter.MyViewHolder> {

    private List<Items> items;
    private Context context;

    public RecAdapter(List<Items> items, Context context )
    {
        this.items = items;
        this.context = context;
    }

    @Override
    public MyViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
        View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.row_item,parent,false);

        return new MyViewHolder(view);
    }

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

        holder.countryname.setText(items.get(position).getCountryname());
        holder.rank.setText(items.get(position).getRank());
        Picasso.with(context)
                .load(items.get(position).getFlag())
                .into(holder.flag);
        holder.setClickListener(new OnItemClickListener() {
            @Override
            public void onClick(View view, int position) {
                Intent intent = new Intent(context , Main2Activity.class);
                context.startActivity(intent);
            }
        });
    }

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

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

        TextView countryname, rank;
        ImageView flag;
        private OnItemClickListener clickListener;

        public MyViewHolder(View itemView) {
            super(itemView);
            countryname = (TextView) itemView.findViewById(R.id.capital);
            rank = (TextView) itemView.findViewById(R.id.rank);
            flag = (ImageView) itemView.findViewById(R.id.flag);
            itemView.setTag(itemView);
            itemView.setOnClickListener(this);

        }
        public void setClickListener(OnItemClickListener itemClickListener) {
            this.clickListener = itemClickListener;
        }
            @Override
        public void onClick(View view) {
            if (clickListener != null) clickListener.onClick(view, getAdapterPosition());
        }    
    }
}

Solution

  • Add click listener like this:-

    View itemView;
    Context context;
    
    
    @Override
    public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
         itemView = LayoutInflater.from(parent.getContext())
                .inflate(R.layout.card_view, parent, false);
        this.context=parent.getContext();
        return new ViewHolder(itemView);
    }
    @Override
        public void onBindViewHolder(final ViewHolder holder, int position) {
    
            holder.itemView.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    Intent intent = new Intent(context , Main2Activity.class);
                    context.startActivity(intent);
                }
            });
        }