在OnBindViewholder recyclelerview android

时间:2016-06-08 09:46:52

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

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

  

让我们假设已经绑定了5个视图,然后点击第一个视图   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) {

            }
        });
    }

位置将保持在onBindViewHolder中绑定的最后一个持有者的位置,因为当我点击它时我的View不会调用onBindViewHolder,不应该保持最后绑定的位置并且只要任何视图获得该位置就显示该位置点击?

3 个答案:

答案 0 :(得分:1)

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

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

答案 1 :(得分:0)

不,position将保留onBindViewHolder中最后一个持有人的位置,因为View点击时onBindViewHolder没有调用Views

有很多可能性来检索正确的位置 - 例如,如果你设置&获取tag ViewHolder中的位置或搜索周围的use Proxies\__CG__\AppBundle\Entity\Place; 并检查其在适配器或布局中的位置。

答案 2 :(得分:0)

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

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