recycleview的复用问题

来源:互联网 发布:excel数据透视表在哪 编辑:程序博客网 时间:2024/05/17 22:37

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

我原来想让第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);
                }


            }
        };


0 0