recycleview的复用问题

原创 2016年06月01日 11:41:40

其实很简单的问题 我不知道我怎么变那么蠢了

我原来想让第0个item改变一下样式之类的,然后就写了这样的代码

@Override
        public void onBindViewHolder(UseHelpViewHolder holder, int position) {




            holder.tvQuestion.setText(data.get(position).getQuestion().getValue());
            holder.tvAnswer.setText(data.get(position).getAnswer().getValue());




            if(position == 0){


                holder.tvQuestion.getPaint().setFlags(Paint.UNDERLINE_TEXT_FLAG);


                holder.tvAnswer.setVisibility(View.GONE);


                holder.tvQuestion.setOnClickListener(new View.OnClickListener() {
                    @Override
                    public void onClick(View view) {
                        Intent intent = new Intent(UseHelpActivity.this,SupportDetailActivity.class);
                        startActivity(intent);
                    }
                });


            }
            

        }


然后发现滑下去滑上来的时候,出现了复用的问题,纠结了半天应该怎么弄


后面发现应该这样写

@Override
        public void onBindViewHolder(UseHelpViewHolder holder, int position) {




            holder.tvQuestion.setText(data.get(position).getQuestion().getValue());
            holder.tvAnswer.setText(data.get(position).getAnswer().getValue());




            if(position == 0){


                holder.tvQuestion.getPaint().setFlags(Paint.UNDERLINE_TEXT_FLAG);


                holder.tvAnswer.setVisibility(View.GONE);


                holder.tvQuestion.setOnClickListener(new View.OnClickListener() {
                    @Override
                    public void onClick(View view) {
                        Intent intent = new Intent(UseHelpActivity.this,SupportDetailActivity.class);
                        startActivity(intent);
                    }
                });


            }
            else{
                holder.tvQuestion.getPaint().setFlags(Paint.HINTING_OFF);


                holder.tvAnswer.setVisibility(View.VISIBLE);


                holder.tvQuestion.setOnClickListener(null);
            }


        }


就是你之前用这个holder设置了第0个item的,那么当你设置另外的顺序的时候,应该把设置第0个的时候的那些属性取消掉


如果使用quickAdapter,那么则是

mAdapter = new QuickAdapter<UseHelpTo>(this, R.layout.item_use_help){


            @Override
            protected void convert(BaseAdapterHelper helper, UseHelpTo item) {
                LOG.pwh("convert position:"+helper.getAdapterPosition());


                helper.setText(R.id.tv_question, item.getQuestion().getValue());
                helper.setText(R.id.tv_answer, item.getAnswer().getValue());


                if(helper.getAdapterPosition() == 0){


                    TextView tvQuestion = helper.getTextView(R.id.tv_question);
                    TextView tvAnswer = helper.getTextView(R.id.tv_answer);


                    tvQuestion.getPaint().setFlags(Paint.UNDERLINE_TEXT_FLAG);
                    tvAnswer.setVisibility(View.GONE);
                    tvQuestion.setOnClickListener(new View.OnClickListener() {
                        @Override
                        public void onClick(View view) {
                            Intent intent = new Intent(UseHelpActivity.this,SupportDetailActivity.class);
                            startActivity(intent);
                        }
                    });




                }
                else{
                    TextView tvQuestion = helper.getTextView(R.id.tv_question);
                    TextView tvAnswer = helper.getTextView(R.id.tv_answer);


                    tvQuestion.getPaint().setFlags(Paint.HINTING_OFF);
                    tvAnswer.setVisibility(View.VISIBLE);
                    tvQuestion.setOnClickListener(null);
                }


            }
        };



如果需要某条数据和之前的数据进行比较而做一些显示方面的改变(比如假如和上一条数据的时间一致就不显示某个控件),那么不能用全局变量保存时间什么的,因为复用会导致出问题的,应该在convert里面这样做

if(position == 0){
                    helper.setVisible(R.id.message_chat_time,true);
                }else{
                    String lastNeedShowTime = mAdapter.getItem(position - 1).getvImMessage().getSendTime();
                    //如果间距相差有2分钟,那么就显示,不然就不显示
                    if(TimeUtil.isTidmeDiffMoreThan(lastNeedShowTime , originTime,2)){
                        helper.setVisible(R.id.message_chat_time,true);
                    }else{
                        helper.setVisible(R.id.message_chat_time,false);
                    }
                }

Recycleview checkbox 复用出现混乱解决方法

今天在做项目的一个我的收藏页面时要实现这么一个效果: 每个item 前面都有一个checkbox ,主要布局是recycleview 。当我们选中某项时,继续往下滑动下面某个的checkbox也...
  • fangchao3652
  • fangchao3652
  • 2015年03月06日 20:10
  • 7208

Android RecyclerView中ViewHolder的复用导致数据错乱解决办法

看图: 视觉效果、recyclerview的基本用法都不说了,超级简单,稍后看代码。 重点来说说item状态的保存问题,其实这个也不是什么新鲜问题,处理起来也不难,方法众多,有setTag的,...
  • fesdgasdgasdg
  • fesdgasdgasdg
  • 2016年07月29日 22:40
  • 29060

解决RecyclerView复用,导致Item混乱问题,checkbox也类似此做法

一、在onBindViewHolder方法中给要操作的控件setTag holderTwo.item_ll_root.setTag(position); 二、在onBindViewHolder方法中...
  • cgt_cgt
  • cgt_cgt
  • 2016年12月22日 12:43
  • 4656

RecyclerView 复用错乱通用解法

RecyclerView 复用错乱通用解法写在前面: 在上篇文章中说过对于像 RecyclerView 或者 ListView 等等此类在有限屏幕中展示大量内容的控件,复用的逻辑就是其核心的逻辑,而...
  • MeloDev
  • MeloDev
  • 2017年08月07日 21:07
  • 3512

RecyclerView条目复用导致混乱的解决方案之一

无论Recycler或者ListView都采用复用机制这是两个控件的精华所在,但是这个复用机制在某些特定的情况总会给我们带来不必须要的烦恼,我模拟一下RecyclerView的复用,条目上的控件只用T...
  • Jackson065
  • Jackson065
  • 2017年04月24日 20:01
  • 2002

Recyclerview由于ViewHolder的复用显示错乱问题解决

  • 2017年07月20日 20:28
  • 21.64MB
  • 下载

探究RecyclerView的ViewHolder复用

在用recyclerview的时候,发现其onCreateViewHolder方法,既不是调用了一次,也不是调用了item个数的次数。因而想看看,RecyclerView的ViewHolder复用。 ...
  • qq_32165689
  • qq_32165689
  • 2017年04月12日 10:47
  • 111

Android AdapterView View的复用机制 分析

对于ListView、GridView相信大家都不陌生,重写个BaseView,实现对于的几个方法,然后就完成了我们的界面展示,并且在大部分情况下,我们加载特别多的Item也不会发生OOM,大家也都明...
  • lmj623565791
  • lmj623565791
  • 2014年04月23日 00:21
  • 42133

Android RecyclerView 使用完全解析 体验艺术般的控件

Android RecyclerView 使用完全解析 概述 RecyclerView出现已经有一段时间了,相信大家肯定不陌生了,大家可以通过导入support-v7对其进行使用。 据官方的介绍...
  • lmj623565791
  • lmj623565791
  • 2015年04月16日 09:07
  • 848657

Android开发之RecyclerView的使用全解

转自 http://blog.csdn.net/dmk877/article/details/50816933 自Android 5.0之后,谷歌公司推出了RecylerView控件,...
  • skykingf
  • skykingf
  • 2016年03月08日 14:50
  • 108525
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:recycleview的复用问题
举报原因:
原因补充:

(最多只允许输入30个字)