Piyell 2015-12-12 02:34
浏览 4340

RecycleView viewholder复用显示混乱的问题

最近在使用recycleview的时候被这个问题困扰好几天了,recycleview.adapter代码如下:
 private class MyRecycleViewAdapter extends RecyclerView.Adapter<MyRecycleViewAdapter.ViewHolder> {
        private  MyRecycleViewAdapter.ViewHolder viewHolder=null;

        @Override
        public MyRecycleViewAdapter.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
            View view = LayoutInflater.from(getActivity()).inflate( R.layout.device_tmperature,parent,false);
            viewHolder = new ViewHolder(view);
            return viewHolder;
        }

        @Override
        public void onBindViewHolder(ViewHolder holder, int position) {
            Log.e(TAG, "onBindView position " + position+" suppose to be seen "+holder.getLayoutPosition()+" ℃" );
            viewHolder.degree.setText(holder.getLayoutPosition()+" ℃");
        }

        @Override
        public long getItemId(int position) {
            return position;
        }

        @Override
        public int getItemCount() {
            return 10;
        }



        @Override
        public void onViewAttachedToWindow(ViewHolder holder) {
            Log.e(TAG, "onViewAttachedToWindow position " + holder.getLayoutPosition()+" suppose to be seen "+holder.getLayoutPosition()+" ℃" );
            viewHolder.degree.setText(holder.getLayoutPosition()+" ℃");

        }

        public class ViewHolder extends RecyclerView.ViewHolder{
            TextView degree = null;
            CardView cv_device=null;

            public ViewHolder(View itemView) {
                super(itemView);
                degree= (TextView) itemView.findViewById(R.id.tv_degree);
                cv_device = (CardView) itemView.findViewById(R.id.cv_device);
                cv_device.setCardElevation(5);
                cv_device.setRadius(5);
            }


        }
    }

图片说明
一开始显示的时候没有问题,但是当我往下滑动到position=4的时候显示的内容就开始混乱了。通过LOG打印出的信息发现是因为当我滑到position=5本应该显示的时候onBindViewHolder和onViewAttachedToWindow提供的viewholder还是position=4的,所以本应该position=5显示“6℃”的时候却变成position=4显示了。已经在在这个问题纠结好几天了有人能帮忙解决吗?谢谢了
图片说明
图片说明

  • 写回答

0条回答 默认 最新

    报告相同问题?

    悬赏问题

    • ¥20 求一个html代码,有偿
    • ¥100 关于使用MATLAB中copularnd函数的问题
    • ¥20 在虚拟机的pycharm上
    • ¥15 jupyterthemes 设置完毕后没有效果
    • ¥15 matlab图像高斯低通滤波
    • ¥15 针对曲面部件的制孔路径规划,大家有什么思路吗
    • ¥15 钢筋实图交点识别,机器视觉代码
    • ¥15 如何在Linux系统中,但是在window系统上idea里面可以正常运行?(相关搜索:jar包)
    • ¥50 400g qsfp 光模块iphy方案
    • ¥15 两块ADC0804用proteus仿真时,出现异常