在Android中使用Holder回收视图滚动问题

时间:2018-06-28 20:25:33

标签: android android-recyclerview recycler-adapter

我创建了一个回收视图适配器,在其中单击行即可填充视图持有者的对象。因此,每当单击回收视图行时,我便始终拥有最新的持有视图对象。

问题是每当我滚动回收视图调用时绑定视图持有人,并且我的视图持有人的值更改运行时间而无需单击任何行

我已经尝试了多种方法来保存当前单击的行的对象,但是我没有得到enter code here

如果有人遇到此问题,请提供帮助

我在可运行状态下执行,那时我获得了不同的持有人价值

private class SeekBarUpdaterRight implements Runnable {
        @Override
        public void run() {
            if (null != rightMusicPlayerHolder) {
                if (player != null) {
                    int curVolume = player.getCurrentPosition();
                   rightMusicPlayerHolder.seekMusicRight.setProgress(curVolume);
                    // int currentHour = curVolume / HOUR;
                    int currentMint = (curVolume % HOUR) / MINUTE;
                    int currentSec = (curVolume % MINUTE) / SECOND;
                    rightMusicPlayerHolder.txtDurationStartRight.setText(String.format("%02d:%02d", currentMint, currentSec));
                    rightMusicPlayerHolder.seekMusicRight.postDelayed(this, 100);
                    Log.print("==========rightMusicPlayerHolder=========" + rightMusicPlayerHolder.getAdapterPosition());
                }
            }
        }
    }

谢谢。

1 个答案:

答案 0 :(得分:0)

OnBindViewHolder()会在任何引起视图更改的情况下被调用,例如滚动,键盘打开/关闭,按下主页或最近按钮等。 创建ViewHolder类的全局变量,然后在onClick()中设置值。例如:

ViewHolder clickedViewHolder;

private void setClickedViewHolder(ViewHolder clickedViewHolder) {
    this.clickedViewHolder = clickedViewHolder;
}

private ViewHolder getClickedViewHolder() {
    return clickedViewHolder;
}

@Override
public void onBindViewHolder(MyAdapter.ViewHolder holder, int position) {
    holder.rowView.setTag(holder);
    holder.rowView.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            setCurrentViewHolder((MyAdapter.ViewHolder) v.getTag());
        }
    });

    ViewHolder currClickedViewHolder = getClickedViewHolder();  // this is the last viewHolder clicked on.
}

然后使用该ViewHolder进行任何操作。