【问题标题】:addOnItemTouchListener or setOnClickListener on item in a RecyclerView?在 RecyclerView 中的项目上添加 OnItemTouchListener 或 setOnClickListener?
【发布时间】:2019-03-25 17:48:35
【问题描述】:

最推荐的处理点击RecyclerView项目的方法是什么?

recyclerView.addOnItemTouchListener(new RecyclerView.OnItemTouchListener() {
    private RecyclerView.OnItemTouchListener itemTouchListener;

    @Override
    public boolean onInterceptTouchEvent(@NonNull RecyclerView recyclerView, @NonNull MotionEvent motionEvent) {
        return false;
    }

    @Override
    public void onTouchEvent(@NonNull RecyclerView recyclerView, @NonNull MotionEvent motionEvent) {}

    @Override
    public void onRequestDisallowInterceptTouchEvent(boolean b) {}
});

或者在适配器内的项目视图上设置点击监听器?

itemView.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View view) {
        //Do stuff
    }
});

【问题讨论】:

  • 一般来说处理设置 OnItemTouchListener 会更好,这样你就不必将监听器绑定到 recyclerview 中的每个视图,应该更有效。 (记住你重用了视图)

标签: android android-recyclerview onclicklistener onitemclicklistener


【解决方案1】:

获得点击recycler view item的最佳且有效的方法是通过使用界面如下:

1) 首先,定义一个接口如下

public interface OnListItemClick {
   void onClick(View view, int position);
}

2) 现在,从您的片段或活动中设置它

OnListItemClick onListItemClick = new OnListItemClick() {
                            @Override
                            public void onClick(View view, int position) {
                              // you will get click here 
                                // do your code here
                             }
                          };
youradaptor.setClickListener(onListItemClick);

3) 现在在你的适配器中创建一个方法

public void setClickListener(OnListItemClick context) {
    this.onListItemClick = context;
}

4) 现在,从您的 itemview 点击如下使用

itemView.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            onListItemClick.onClick(view, getAdapterPosition()); // passing click to interface
        }
});

【讨论】:

    【解决方案2】:

    它使用接口来处理 Recycler 视图中的 onClick 事件的最常见方式。 Great read about this topic here

    【讨论】:

      【解决方案3】:

      寻求您的第二意见。但是应该实现一个接口来处理 OnClick 事件

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2021-01-04
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多