首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在一个虚拟机中实现onClickListener和onLongClickListener?

如何在一个虚拟机中实现onClickListener和onLongClickListener?
EN

Stack Overflow用户
提问于 2017-11-26 08:38:25
回答 1查看 444关注 0票数 1

我正在尝试,但当我同时实现这两种方法时,ViewHolder无法访问任何一种方法。有可能吗?我的代码:

代码语言:javascript
复制
public final class SomeViewHolder extends RecyclerView.ViewHolder
    implements View.OnClickListener, View.OnLongClickListener {

    public final AestheticTextView mName;
    public final AestheticTextView mNumber;

    public SomeViewHolder(View itemView) {
        super(itemView);
        mName = (AestheticTextView) itemView.findViewById(android.R.id.title);
        mNumber = (AestheticTextView) itemView.findViewById(android.R.id.summary);

        itemView.setOnClickListener(this);
        itemView.setOnLongClickListener(this);
    }

    @Override
    public void onClick(View view) {
        // doesn't run
    }

    @Override
    public boolean onLongClick(View view) {
        // doesn't run
    }
}

如果我删除一个监听器,就像下面这样,它工作得很好。

代码语言:javascript
复制
public final class SomeViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener {

    public final AestheticTextView mName;
    public final AestheticTextView mNumber;

    public SomeViewHolder(View itemView) {
        super(itemView);
        mName = (AestheticTextView) itemView.findViewById(android.R.id.title);
        mNumber = (AestheticTextView) itemView.findViewById(android.R.id.summary);

        itemView.setOnClickListener(this);
    }

    @Override
    public void onClick(View view) {
        // run properly
    }
}
EN

回答 1

Stack Overflow用户

发布于 2017-11-26 08:50:45

创建绑定方法或您想要调用它的任何名称。

代码语言:javascript
复制
public void bind(ModelClass model, MyInterface listener) {

itemView.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View view) {
//Create your own interface and add arguments based on your needs
                    listener.itemClicked(view);
                }
            });

itemView.setOnClickListener(new View.OnClickListener() {
                    @Override
                    public void onClick(View view) {
    //Create your own interface and add arguments based on your needs
                        listener.itemLongClicked(view);
                    }
                });
}

onBindViewHolder()上的

代码语言:javascript
复制
holder.bind(item.get(position), listener);

以及在声明您的Adapter

代码语言:javascript
复制
    adapter = new MyAdapter(item, new OnItemClick() {
        @Override
        public void itemClicked(View view, ModelClass model) {
            //event
        }
        @Override
        public void itemLongClicked(View view, ModelClass model) {
            return true;
        }
    });
票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/47491939

复制
相关文章

相似问题

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