Nicholas Muir
Nicholas Muir

Reputation: 3124

Get recyclerview listener in another class

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

Answers (2)

MidasLefko
MidasLefko

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

shaikhmanzoor
shaikhmanzoor

Reputation: 89

You can use EventBus or you can use interface for doing this

Upvotes: 0

Related Questions