【问题标题】:Get recyclerview listener in another class在另一个类中获取recyclerview监听器
【发布时间】:2016-01-11 10:34:11
【问题描述】:

我有一个显示ImageView 并在其下方显示RecyclerView 的主要活动。在RecyclerView 的适配器中,我在视图支架上实现了onClickListner,它工作正常。

但是,当单击按钮时,我需要单击以在主活动中设置图像,但无论如何我都看不到在主活动中实现侦听器以将结果从适配器获取到主活动。我尝试使用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);

    }

感谢您的帮助

【问题讨论】:

  • 我认为你可以使用this 链接。这将有助于在 RecyclerView 上获取 onClickListener。

标签: android adapter android-recyclerview onclicklistener


【解决方案1】:

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

1.我创建一个接口类:

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

2.当我创建我的适配器时,我为 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.在适配器内的 onClick 监听器中,我调用 mCallbacks.onClick(object)。在你的情况下是这样的

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

4.最后,当我创建适配器时,我将一个匿名的 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);
    }
});

【讨论】:

    【解决方案2】:

    你可以使用 EventBus 或者你可以使用接口来做这件事

    【讨论】:

      猜你喜欢
      • 2013-11-10
      • 2011-06-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多