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条回答

    报告相同问题?

    悬赏问题

    • ¥15 执行 virtuoso 命令后,界面没有,cadence 启动不起来
    • ¥50 comfyui下连接animatediff节点生成视频质量非常差的原因
    • ¥20 有关区间dp的问题求解
    • ¥15 多电路系统共用电源的串扰问题
    • ¥15 slam rangenet++配置
    • ¥15 有没有研究水声通信方面的帮我改俩matlab代码
    • ¥15 ubuntu子系统密码忘记
    • ¥15 保护模式-系统加载-段寄存器
    • ¥15 电脑桌面设定一个区域禁止鼠标操作
    • ¥15 求NPF226060磁芯的详细资料