Anvesh523
Anvesh523

Reputation: 368

how do I manage multiple clicks in cardview with recyclerview

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

for example : enter image description here

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

Answers (2)

Emil
Emil

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

dominik4142
dominik4142

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

Related Questions