首页 > 解决方案 > Android中Holder的回收视图滚动问题

问题描述

我创建了一个回收视图适配器,在其中我通过单击行来填充视图持有者的对象。因此,每当我点击回收视图行时,我总是拥有最新的视图持有者对象。

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

我已经尝试了很多方法来保存我当前的点击行对象,但我没有得到那个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());
                }
            }
        }
    }

提前致谢..

标签: androidandroid-recyclerview

解决方案


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 做任何你想做的事。


推荐阅读