Reputation: 33
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
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
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
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