Reputation: 3124
I have a main activity that displays an ImageView
and below that a RecyclerView
. In the adapter for the RecyclerView
I implemented onClickListner
on the view holder and it is working fine.
However I need the click to set the image in the main activity when the button is clicked but I cannot see anyway to implement a listner in the main activity to get the results from the adapter to the main activity. I tried the using the onClick
as below but that gives a null pointer exception.
class AddVideoTitleViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener {
TextView TitleScreenTitle;
ImageView TitleScreenImage;
public AddVideoTitleViewHolder(View itemView) {
super(itemView);
TitleScreenTitle = (TextView) itemView.findViewById(R.id.AddVideoTitleSingleRowTextView);
TitleScreenImage = (ImageView) itemView.findViewById(R.id.AddVideoTitleSingleRowImageView);
TitleScreenImage.setOnClickListener(this);
}
@Override
public void onClick(View v) {
final ImageView TitleImage = (ImageView) v.findViewById(R.id.TitleImageimageView);
AddTitlesInformation current = data.get(getAdapterPosition());
TitleImage.setImageResource(current.titleImageId);
}
Thanks for the help
Upvotes: 2
Views: 1028
Reputation: 4559
I use an interface for almost all of my recyclerviews. Here's how:
1.I create an interface class:
public interface IRecyclerViewCallbacks {
public void onClick(Object object);
}
2.When I create my adapter I add a parameter for an IRecyclerViewCallbacks object:
public class ExampleAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder> {
private ArrayList<Model> mData;
private IRecyclerViewCallbacks mCallbacks;
public ExampleAdapter (@NotNull ArrayList<Model> data, @NotNull IRecyclerViewCallbacks callbacks) {
mData= data;
mCallbacks = callbacks;
}
}
3.In the onClick listener inside the adapter I call mCallbacks.onClick(object). In your case something like this
@Override
public void onClick(View v) {
AddTitlesInformation current = mData.get(getAdapterPosition());
mCallbacks.onClick(current.titleImageId);
}
4.Finally, when I create the adapter I pass it an anonymous IRecyclerViewCallback object. In your case something like this:
ExampleAdapter adapter = new ExampleAdapter(mData, new IRecyclerViewCallbacks() {
@Override
public void onClick(Object object) {
int titleImageRes = (int) object;
final ImageView TitleImage = (ImageView) v.findViewById(R.id.TitleImageimageView);
TitleImage.setImageResource(titleImageRes);
}
});
Upvotes: 1