【问题标题】:How to implement onClickListener and onLongClickListener in a single viewholder?如何在单个视图中实现 onClickListener 和 onLongClickListener?
【发布时间】:2018-05-09 13:41:37
【问题描述】:

我正在尝试,但是当我同时实现两者时,ViewHolder 无法达到任何一个。可能吗?我的代码:

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

如果我删除其中一个侦听器,如下所示,它可以正常工作。

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

【问题讨论】:

  • 对不起,我没有明白你的意思,但我返回一个布尔值,因为实现需要它。
  • 你返回true还是false?
  • True #words 完成最小长度#

标签: java android android-viewholder


【解决方案1】:

创建一个绑定方法或任何你想调用的方法。

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

holder.bind(item.get(position), listener);

当你声明你的Adapter

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

【讨论】:

  • 但这与直接在构造函数中实现两个侦听器相同,我实际上可以这样做,但似乎被认为是一种不好的做法。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-10-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-06-05
  • 2021-08-27
相关资源
最近更新 更多