为啥 recyclerview.setOnCickListener(this) 不可点击?

Posted

技术标签:

【中文标题】为啥 recyclerview.setOnCickListener(this) 不可点击?【英文标题】:Why recyclerview.setOnCickListener(this) not clickable?为什么 recyclerview.setOnCickListener(this) 不可点击? 【发布时间】:2021-10-23 15:14:32 【问题描述】:

我试图在我的片段中设置一个简单的点击到一个带有内部 view.onclicklistener 的 recyclerview。我的问题是,为什么我在recyclerview区域点击时没有任何onClick回调?

我的代码如下:

        @Override
        public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) 
    
            
            binding.list.recyclerview.setLayoutManager(new LinearLayoutManager(getContext()));
            binding.recyclerview.setClickable(true);
            binding.recyclerview.setAdapter(adapter);
            binding.recyclerview.setOnClickListener(new View.OnClickListener() 
                @Override
                public void onClick(View view) 

                    Log.d("log", "Clicked");
                
            );
            
        

【问题讨论】:

为什么要在recyclerview而不是item上设置onclick? 【参考方案1】:

binding.recyclerview.setOnClickListener 行将使RecyclerView 本身可点击,并且您可能正在寻找当RecyclerView 的任何列表项/子项将被点击时触发的点击监听器。在这种情况下使用this SO 中的类并像这样设置它:

binding.recyclerView.addOnItemTouchListener(
    new RecyclerItemClickListener(context, recyclerView ,new RecyclerItemClickListener.OnItemClickListener() 
      @Override public void onItemClick(View view, int position) 
        // do whatever
      

      @Override public void onLongItemClick(View view, int position) 
        // do whatever
      
    )
);

【讨论】:

【参考方案2】:

这只是因为您必须执行来自适配器类的单击事件, 点击here获取更多参考资料。

【讨论】:

以上是关于为啥 recyclerview.setOnCickListener(this) 不可点击?的主要内容,如果未能解决你的问题,请参考以下文章

为啥 DataGridView 上的 DoubleBuffered 属性默认为 false,为啥它受到保护?

为啥需要softmax函数?为啥不简单归一化?

为啥 g++ 需要 libstdc++.a?为啥不是默认值?

为啥或为啥不在 C++ 中使用 memset? [关闭]

为啥临时变量需要更改数组元素以及为啥需要在最后取消设置?

为啥 CAP 定理中的 RDBMS 分区不能容忍,为啥它可用?