Defining a RecyclerView's onCLickListener in an Activity
See the example below to create RecyclerView
OnClick
.
Example Code:
public class ContentAdapter extends RecyclerView.Adapter<ContentAdapter.ViewHolder> {
public interface OnItemClickListener {
void onItemClick(ContentItem item);
}
private final List<ContentItem> items;
private final OnItemClickListener listener;
public ContentAdapter(List<ContentItem> items, OnItemClickListener listener) {
this.items = items;
this.listener = listener;
}
@Override public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
View v = LayoutInflater.from(parent.getContext()).inflate(R.layout.view_item, parent, false);
return new ViewHolder(v);
}
@Override public void onBindViewHolder(ViewHolder holder, int position) {
holder.bind(items.get(position), listener);
}
@Override public int getItemCount() {
return items.size();
}
static class ViewHolder extends RecyclerView.ViewHolder {
private TextView name;
private ImageView image;
public ViewHolder(View itemView) {
super(itemView);
name = (TextView) itemView.findViewById(R.id.name);
image = (ImageView) itemView.findViewById(R.id.image);
}
public void bind(final ContentItem item, final OnItemClickListener listener) {
name.setText(item.name);
Picasso.with(itemView.getContext()).load(item.imageUrl).into(image);
itemView.setOnClickListener(new View.OnClickListener() {
@Override public void onClick(View v) {
listener.onItemClick(item);
}
});
}
}
}
And Use RecyclerView
Adapter using below code:
recycler.setAdapter(new ContentAdapter(items, new ContentAdapter.OnItemClickListener() {
@Override public void onItemClick(ContentItem item) {
Toast.makeText(getContext(), "Item Clicked", Toast.LENGTH_LONG).show();
}
}));
See Set a click listener to a RecyclerView
Hope it helped you.
Write a public function in your activity like:
public void onClickCalled(String anyValue) {
// Call another acitivty here and pass some arguments to it.
}
Now in your adapter's onClick funciton
@Override
public void onClick(View view) {
((YouActivityClass) context).onClickCalled("your argument here");
}
I had this problem with the first good answer. Had a problem(Context Error).
I put the following code in onBindViewHolder.
In adapter :
holder.itemView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
((YouActivityClass) v.getContext()).onClickCalled("your argument here");
}
});
In Activity :
public void onClickCalled(String anyValue) {
// Call another acitivty here and pass some arguments to it.
}
The Whole