Get recyclerview listener in another class

孤街醉人 提交于 2019-12-10 10:49:38

问题


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


回答1:


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);
    }
});



回答2:


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



来源:https://stackoverflow.com/questions/34719302/get-recyclerview-listener-in-another-class

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!