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也...

Android RecycleView 实现单选列表 并解决View复用导致错乱问题

1.缓存机制 离屏的ItemView即被回收至缓存,入屏的ItemView则会优先从缓存中获取 因此实现单选的过程中会出现多选的情况或内容错乱,原因是取得是之前的缓存的item布局。 2.解决办...

我是如何成为一名python大咖的?

人生苦短,都说必须python,那么我分享下我是如何从小白成为Python资深开发者的吧。2014年我大学刚毕业..

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

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

动手打造史上最简单的 Recycleview 侧滑菜单

Recycleview 侧滑菜单大多的实现思路是:通过自定义 Recycleview 或 Adapter 提供创建菜单方法,然后内部再关联到各个 item 改变其布局,从而使 item 具有侧滑功能,...

Android 5.X新特性之RecyclerView基本解析及无限复用

说到RecyclerView,相信大家都不陌生,它是我们经典级ListView的升级版,升级后的RecyclerView展现了极大的灵活性。同时内部直接封装了ViewHolder,不用我们自己定义Vi...
  • guiman
  • guiman
  • 2016-05-04 09:34
  • 6634

Android RecycleView出现大间隔问题分析

Android RecycleView出现大间隔问题分析文章链接知识点 RecycleView使用StaggeredGridLayoutManager出现大间隔问题; RecycleView中一些“有...

ScrollView里嵌套Recycleview使用StaggeredGridLayoutManager高度不正确的问题

http://frank-zhu.github.io/android/2015/02/26/android-recyclerview-part-3/ 作者的这个文章中给出了ScrollView中嵌套...

在RecycleView.Adapter 的 onBinderViewHolder 中刷新adapter报错的问题

我在我自己的项目中使用到了RecycleView,然后在RecycleView.Adapter中的onBinderViewHolder中刷新了我的adapter。 然后报了如下错误: java.lan...

暴力解决recycleview跟scrollview嵌套问题

本文转载自:http://blog.csdn.net/u012721933/article/details/50953207scrollview 嵌套recyclerview 时,recyclervi...
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

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