Reputation: 368
I am using cardview with recyclerview in Android.
Inside one card View I am implementing multiple buttons....
So, How can I implement different click events for each button
I am not able to use Intent to call one more activity for different click options
If I click Image it have to goto one activity
If I click description it have to goto another activity
MainActivity
public class MainActivity extends ActionBarActivity {
RecyclerView mRecyclerView;
RecyclerView.LayoutManager mLayoutManager;
RecyclerView.Adapter mAdapter;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mRecyclerView = (RecyclerView) findViewById(R.id.recycler_view);
mRecyclerView.setHasFixedSize(true);
mLayoutManager = new LinearLayoutManager(this);
mRecyclerView.setLayoutManager(mLayoutManager);
mAdapter = new CardAdapter();
mRecyclerView.setAdapter(mAdapter);
}
}
CardAdapter
public class CardAdapter extends RecyclerView.Adapter<CardAdapter.ViewHolder> {
List<Items> mItems;
public CardAdapter() {
super();
mItems = new ArrayList<Items>();
Items nature = new Items();
nature.setName("The Great Barrier Reef");
nature.setDes("Lorem ipsum dolor sit amet");
nature.setThumbnail(R.drawable.great_barrier_reef);
mItems.add(nature);
nature = new Items();
nature.setName("Grand Canyon");
nature.setDes("Lorem ipsum dolor sit amet");
nature.setThumbnail(R.drawable.grand_canyon);
mItems.add(nature);
nature = new Items();
nature.setName("Baltoro Glacier");
nature.setDes("Lorem ipsum dolor sit amet");
nature.setThumbnail(R.drawable.baltoro_glacier);
mItems.add(nature);
}
@Override
public ViewHolder onCreateViewHolder(ViewGroup viewGroup, int i) {
View v = LayoutInflater.from(viewGroup.getContext())
.inflate(R.layout.recycler_view_card_item, viewGroup, false);
ViewHolder viewHolder = new ViewHolder(v);
return viewHolder;
}
@Override
public void onBindViewHolder(ViewHolder viewHolder, int i) {
Items nature = mItems.get(i);
viewHolder.tvNature.setText(nature.getName());
viewHolder.tvDesNature.setText(nature.getDes());
viewHolder.imgThumbnail.setImageResource(nature.getThumbnail());
}
@Override
public int getItemCount() {
return mItems.size();
}
class ViewHolder extends RecyclerView.ViewHolder{
public ImageView imgThumbnail;
public TextView tvNature;
public ViewHolder(View itemView) {
super(itemView);
imgThumbnail = (ImageView)itemView.findViewById(R.id.img_thumbnail);
tvNature = (TextView)itemView.findViewById(R.id.tv_nature);
}
}
}
Items
public class Items {
private String mName;
private String mDes;
private int mThumbnail;
public String getName() {
return mName;
}
public void setName(String name) {
this.mName = name;
}
public String getDes() {
return mDes;
}
public void setDes(String des) {
this.mDes = des;
}
public int getThumbnail() {
return mThumbnail;
}
public void setThumbnail(int thumbnail) {
this.mThumbnail = thumbnail;
}
}
Upvotes: 1
Views: 2764
Reputation: 2806
You have to pass in a Context
to the adapter class. then you can call startActivity()
using that.
1.Change your Adapter
constructor like this
private Context context
public CardAdapter(Context context) {
this.context = context;
....//your remaining code
}
2.change your onBindViewHolder
like this
@Override
public void onBindViewHolder(ViewHolder viewHolder, int i) {
Items nature = mItems.get(i);
viewHolder.tvNature.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Intent intent = new Intent(context,TargetActivity.class)
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);)
context.startActivity(intent);
}
});
...//remaining code
}
3.And now in onCreate()
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
....
mAdapter = new CardAdapter(this); //change this line
mRecyclerView.setAdapter(mAdapter);
}
Upvotes: 1
Reputation: 576
You need to define your custom click listener that is able to determine which view was clicked (or a couple of different, each for different view), forward class implementing it to adapter (for example containing fragment/activity) and then in onBindViewHolder
method set this reference as onClickListener
on views that you need.
Upvotes: 1