首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >OnItemClickListener和OnItemLongClickListener在RecyclerView上的实现

OnItemClickListener和OnItemLongClickListener在RecyclerView上的实现
EN

Stack Overflow用户
提问于 2018-04-19 05:24:52
回答 3查看 523关注 0票数 0

我想在我的回收视图上同时实现OnItemClickListener和OnItemLongClickListener。我使用Android库BRVAH来设置适配器。

我希望有一个OnItemLongClickListener的自定义声明,这样我就可以将它放在(已经实现的) OnItemClickListener上。

代码语言:javascript
复制
    mAdapter.setOnItemClickListener(new BaseQuickAdapter.OnItemClickListener() {
        public void onItemClick(BaseQuicAdapter adapter, final View view, int position) {
        .....
        }
    });
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2018-04-19 05:33:03

您可以使用库的下列方法。

代码语言:javascript
复制
   /**
     * Register a callback to be invoked when an item in this RecyclerView has
     * been long clicked and held
     *
     * @param listener The callback that will run
     */
    public void setOnItemLongClickListener(OnItemLongClickListener listener) {
        mOnItemLongClickListener = listener;
    }

所以要在代码中实现它

代码语言:javascript
复制
    mAdapter.setOnItemLongClickListener(new BaseQuickAdapter.OnItemLongClickListener() {
    boolean onItemLongClick(BaseQuickAdapter adapter, View view, int position) {
    .....
    }
票数 0
EN

Stack Overflow用户

发布于 2018-04-19 05:57:35

您必须制作两个界面来处理单击事件和长时间单击事件到适配器中进行回收查看。

比如把下面的接口变成适配器类。

代码语言:javascript
复制
onItemClickListner onItemClickListner;
onItemLongClickListner onItemLongClickListner;

public void setOnItemLongClickListner(RecyclerViewAdpater.onItemLongClickListner onItemLongClickListner) {
    this.onItemLongClickListner = onItemLongClickListner;
}

public void setOnItemClickListner(RecyclerViewAdpater.onItemClickListner onItemClickListner) {
    this.onItemClickListner = onItemClickListner;
}

public interface onItemClickListner {
    void onClick(String str);//pass your object types.
}
public interface onItemLongClickListner{
    void onLongClick(String str);
}
@Override
public void onBindViewHolder(ItemViewHolder holder, int position) {
    String data = mStringList.get(position); // if you pass object of class then create that class object.
    holder.textView.setText(data);
    // below code handle click event on recycler view item.
    holder.itemView.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            onItemClickListner.onClick(data);
        }
    });
    holder.itemView.setOnLongClickListener(new View.OnLongClickListener() {
        @Override
        public boolean onLongClick(View view) {
            onItemLongClickListner.onLongClick("Hiii");
            return false;
        }
    });
}

然后在活动结束后,在定义回收器视图后,适配器定义并绑定到回收器视图中,然后得到两个事件,如下所示。

代码语言:javascript
复制
recyclerViewAdpater.setOnItemClickListner(new RecyclerViewAdpater.onItemClickListner() {
        @Override
        public void onClick(String str) {
            Toast.makeText(getApplicationContext(),"Value of Click"+str,Toast.LENGTH_SHORT).show();
        }
    });
    recyclerViewAdpater.setOnItemLongClickListner(new RecyclerViewAdpater.onItemLongClickListner() {
        @Override
        public void onLongClick(String str) {
            Toast.makeText(getApplicationContext(),"Value of Long Click"+str,Toast.LENGTH_SHORT).show();

        }
    });
票数 1
EN

Stack Overflow用户

发布于 2018-04-19 05:36:41

进入适配器,找到ViewHolder类并编写以下代码

代码语言:javascript
复制
  public class MyViewHolder extends RecyclerView.ViewHolder{

        public MyViewHolder(View itemView) {
            super(itemView);

            itemView.setOnClickListener(new OnClickListener() {
                @Override
                public void onClick(View view) {
                    //call onClick handler here  
                }
            });

            itemView.setOnLongClickListener(new OnLongClickListener() {
                @Override
                public boolean onLongClick(View view) {
                    //call onLongClick handler here                        //Here you will return true
                    return true;
                }
            });

        }
    }

然后创建两个接口,如

代码语言:javascript
复制
 public interface OnMyLongClickListener{
        void onLongClick(int pos);
    }
    public interface OnMyClickClickListener{
        void onClick(int pos);
    }

在活动或片段类中实现这两个接口,然后在接受事件中调用这些接口方法。

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

https://stackoverflow.com/questions/49913295

复制
相关文章

相似问题

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