在另一个 class 中获取 recyclerview 侦听器

Get recyclerview listener in another class

我有一个主 activity,它显示一个 ImageView,下面是一个 RecyclerView。在 RecyclerView 的适配器中,我在视图持有者上实现了 onClickListner,它工作正常。

但是我需要在单击按钮时在主 activity 中设置图像,但无论如何我都看不到在主 activity 中实现监听器以从主适配器 activity。我尝试使用 onClick 如下所示,但这给出了 空指针异常 .

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

    }

感谢帮助

您可以使用 EventBus 或使用接口来执行此操作

我几乎所有的回收站视图都使用一个界面。方法如下:

1.I 创建接口 class:

public interface IRecyclerViewCallbacks {
    public void onClick(Object object);
}

2.When 我创建了我的适配器 我为 IRecyclerViewCallbacks 对象添加了一个参数:

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 我调用的适配器内的 onClick 侦听器 mCallbacks.onClick(object)。在你的情况下是这样的

@Override
public void onClick(View v) {
    AddTitlesInformation current = mData.get(getAdapterPosition());
    mCallbacks.onClick(current.titleImageId);
}

4.Finally,当我创建适配器时,我将一个匿名 IRecyclerViewCallback 对象传递给它。在你的情况下是这样的:

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