单击 OnBindViewholder recyclerview 中的侦听器 android

click listener in OnBindViewholder recyclerview android

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

let's suppose 5 views have been binded and i click on the first itemview,then should'nt it show me the last position held by the last binded 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 中绑定的最后一个 holder 的位置,因为当我单击它时我的 View 不会调用 onBindViewHolder,因此 position 不应该保持最后一个绑定的位置并且在任何时候只显示那个位置视图获得点击?

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

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

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

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

onBindViewHolder 中的位置与您的 adapter/data 集合中的位置相同。您的 Click Listener 正在设置 position 绑定时在您的数据集中表示的单个 ViewHolder。即使在绑定所有视图之后才调用点击事件,每个函数实例都已设置为使用每个视图设置的相应位置。

如果每个 View 共享同一个 Click Listener 实例,那么您将只能获得最后一个位置。但是,每个视图都有自己的点击监听器实例。