【问题标题】:Where should a click listener be in a recycler view?点击监听器应该在回收站视图中的什么位置?
【发布时间】:2016-01-15 17:50:32
【问题描述】:

我的回收器视图的项目有一些不同的视图,如果我将点击监听器添加到带有视图和位置参数的回收器视图,它必须有一个点击监听器,它总是在点击时采用视图后面的布局。因此,我在 onBindViewHolder 中设置我的点击侦听器,如下所示:

holder.myTextView.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            // stuff
        }
    });

holder.myImageView.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            // stuff
        }
    });

不知这方法是否正确?

【问题讨论】:

  • 我认为这取决于您在 onclick 方法中所做的事情。我看不出这种方法有什么问题。
  • 是的,这是正确的方法,我也使用了同样的方法

标签: android android-recyclerview


【解决方案1】:

点击监听器应该在回收站视图中的什么位置?

有很多方法可以实现这一点,但是;

正如我在您的代码中看到的那样,两者都是正确的。意味着,如果您使用 myTextView 设置这些项目,用户将能够单击 TextView (fg) 以显示 RecyclerView 项目内容或其他内容,并且ImageView 之类的其他内容不适用于听众。

这对于myImageView 也是正确的,如果您将这些项目设置为监听器,用户将能够在此myImageView 中点击only

顺便说一句,我认为最好使用implements View.OnClickListener 整个Holder

类似这样的:

https://stackoverflow.com/a/24471410/4409113

或雅各布的answer

【讨论】:

  • 谢谢你,另外,实现 view.onclicklistener 和在 onbindviewholder 中为每个项目设置监听器之间有很大的性能差异吗?
  • 是的,我希望如此,就像你说的那样,我对每个项目都做同样的事情,我只是想了一下,似乎有道理,想象一下,我们可以使用整个RowHolder而不是那些重复或糟糕的方式。很多用于处理简单方式的代码听起来很疯狂,对吧? :)
  • 在雅各布的回答中,当我尝试使用 view.getClass() 的 onclick 方法时,它总是返回作为背景的线性布局。它不会检测布局前面的按钮或其他视图。
  • 非常感谢。如果您检查此问题,我将不胜感激stackoverflow.com/questions/34818380/…
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-09-05
  • 2022-01-05
  • 2018-11-17
  • 1970-01-01
  • 2017-03-23
  • 2019-01-27
  • 2019-06-19
相关资源
最近更新 更多