首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在另一个类中获取回收视图侦听器

在另一个类中获取回收视图侦听器
EN

Stack Overflow用户
提问于 2016-01-11 10:34:11
回答 2查看 996关注 0票数 2

我有一个主要活动,它显示一个ImageView,在它下面显示一个RecyclerView。在RecyclerView的适配器中,我在视图持有者上实现了onClickListner,它运行良好。

但是,当单击按钮时,我需要单击以在主活动中设置图像,但无论如何,我无法在主活动中实现listner,以从适配器获得结果到主活动。我尝试使用onClick,如下所示,但这会给出一个空指针异常

代码语言:javascript
复制
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);

    }

谢谢你的帮助

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-01-11 11:03:14

我使用一个界面几乎所有我的回收视图。下面是操作步骤:

1.我创建了一个接口类:

代码语言:javascript
复制
public interface IRecyclerViewCallbacks {
    public void onClick(Object object);
}

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

代码语言:javascript
复制
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)。在你的情况下,就像这样

代码语言:javascript
复制
@Override
public void onClick(View v) {
    AddTitlesInformation current = mData.get(getAdapterPosition());
    mCallbacks.onClick(current.titleImageId);
}

4.最后,在创建适配器时,我传递给它一个匿名IRecyclerViewCallback对象。在你的例子中是这样的:

代码语言:javascript
复制
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);
    }
});
票数 1
EN

Stack Overflow用户

发布于 2016-01-11 10:40:15

您可以使用EventBus,也可以使用接口进行此操作。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/34719302

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档