【问题标题】:click listener in OnBindViewholder recyclerview android点击 OnBindViewholder recyclerview android中的监听器
【发布时间】:2016-06-08 09:46:51
【问题描述】:

在下面的代码中,每次调用'setlisteners'方法,位置值不应该改变吗? 只有一种方法'setlisteners'在其中传递参数位置,但是在日志中,我看到每当我的按钮上发生单击事件时,它都会显示正确的位置。位置不应该覆盖自身并显示不正确的位置,因为点击事件可能随时发生,到那时位置的值会发生变化?

假设已经绑定了 5 个视图,我点击了第一个 itemview,那么它不应该向我显示最后一个职位 绑定itemview?

 @Override
 public void onBindViewHolder(ViewHolder holder, int position) {


     setListeners(holder,position);


    }

private void setListeners(ViewHolder holder, final int position) {
        holder.updownarrow.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Log.e("ddfg",""+position);

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

            }
        });
    }

position 将保留最后一个绑定在 onBindViewHolder 中的持有者的位置,因为当我单击它时,我的 View 不会调用 onBindViewHolder,所以不应将 position 保留最后绑定的位置,并且在任何视图获取时只显示一个位置点击了吗?

【问题讨论】:

    标签: java android methods android-recyclerview android-adapter


    【解决方案1】:

    onBindViewHolder 中的位置与您的适配器/数据集中的位置相同。您的 Click Listener 正在设置为 position 绑定时数据集中表示的单个 ViewHolder。即使在绑定所有视图之后才会调用 click 事件,但每个函数实例已经设置为使用每个视图设置的相应位置。

    如果每个 View 共享同一个 Click Listener 实例,那么您只能获得最后一个位置。但是,每个 View 都拥有自己的 Click Listener 实例。

    【讨论】:

      【解决方案2】:

      不,position 将保留 onBindViewHolder 中最后一个持有者的位置,因为您的 View 在您单击它时不会调用 onBindViewHolder

      检索正确位置的可能性有很多——例如,如果您在Views tag 中设置和获取位置,或者搜索周围的ViewHolder 并检查其在适配器或布局中的位置。

      【讨论】:

      • you have said" position 将保留最后一个在 onBindViewHolder 中绑定的持有者的位置"。然后假设已经绑定了 5 个视图,我点击第一个 itemview,那么它不应该显示我最后一个绑定的 itemview 持有的最后一个位置?
      • 是的,应该可以。但这并不意味着您的最后一个列表项是最后一个绑定视图。
      【解决方案3】:

      不要使用 onBindViewHolder 中的位置。使用这个:

      final int adapterPosition = viewholder.getAdapterPosition();
      // do what ever with it
      

      【讨论】:

        猜你喜欢
        • 2017-03-28
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2023-04-04
        • 1970-01-01
        相关资源
        最近更新 更多