Android ListView和带有ViewHolder的自定义适配器

Android ListView和带有ViewHolder的自定义适配器,android,listview,android-listview,listadapter,android-viewholder,Android,Listview,Android Listview,Listadapter,Android Viewholder,我的ListView适配器在ArrayList中显示项目时遇到问题 在大多数情况下,它似乎是有效的。。。每个项目的视图都是正确的。。。然而,当我实现(convertView==null)时,验证似乎搞砸了 没有这个。。。显示器在所有正确的验证条件下都能正常工作。。。但是,只要我在(convertView==null)部分中输入,我的验证就无法正常工作。。。这是最奇怪的事 工作完美… public View getView(int position, View convertView, ViewG

我的ListView适配器在ArrayList中显示项目时遇到问题

在大多数情况下,它似乎是有效的。。。每个项目的视图都是正确的。。。然而,当我实现(convertView==null)时,验证似乎搞砸了

没有这个。。。显示器在所有正确的验证条件下都能正常工作。。。但是,只要我在(convertView==null)部分中输入,我的验证就无法正常工作。。。这是最奇怪的事

工作完美…

public View getView(int position, View convertView, ViewGroup parent)
    {
        // View rowView = convertView;
        final ViewHolder viewHolder;

            LayoutInflater theInflater = LayoutInflater.from(context);
            convertView = theInflater.inflate(R.layout.score_layout, null);

            viewHolder = new ViewHolder();

            viewHolder.textViewScoreQuestion = (TextView) convertView.findViewById(R.id.textViewScoreQuestion);
            viewHolder.checkBoxScoreOne = (CheckBox) convertView.findViewById(R.id.checkBoxScoreOne);
            viewHolder.checkBoxScoreTwo = (CheckBox) convertView.findViewById(R.id.checkBoxScoreTwo);
            viewHolder.checkBoxScoreThree = (CheckBox) convertView.findViewById(R.id.checkBoxScoreThree);
            viewHolder.checkBoxScoreFour = (CheckBox) convertView.findViewById(R.id.checkBoxScoreFour);

            Questions question = questionsInOrder.get(position);
            String givenAnswer = answerChoices.get(position);

            viewHolder.textViewScoreQuestion.setText(question.getQuestion());
            viewHolder.checkBoxScoreOne.setText(question.getAnswer1());
            viewHolder.checkBoxScoreTwo.setText(question.getAnswer2());
            viewHolder.checkBoxScoreThree.setText(question.getAnswer3());
            viewHolder.checkBoxScoreFour.setText(question.getAnswer4());

            // display incorrect answers as red, and correct answers as blue
            if (givenAnswer.equals(question.getAnswer1()) && !(givenAnswer.equals(question.getCorrect())))
            {
                viewHolder.checkBoxScoreOne.setTextColor(context.getResources().getColor(R.color.red));
            }
            if (givenAnswer.equals(question.getAnswer1()) && (givenAnswer.equals(question.getCorrect())))
            {
                viewHolder.checkBoxScoreOne.setTextColor(context.getResources().getColor(R.color.holo_blue_dark));
            }

            if (givenAnswer.equals(question.getAnswer2()) && !(givenAnswer.equals(question.getCorrect())))
            {
                viewHolder.checkBoxScoreTwo.setTextColor(context.getResources().getColor(R.color.red));
            }
            if (givenAnswer.equals(question.getAnswer2()) && (givenAnswer.equals(question.getCorrect())))
            {
                viewHolder.checkBoxScoreTwo.setTextColor(context.getResources().getColor(R.color.holo_blue_dark));
            }

            if (givenAnswer.equals(question.getAnswer3()) && !(givenAnswer.equals(question.getCorrect())))
            {
                viewHolder.checkBoxScoreThree.setTextColor(context.getResources().getColor(R.color.red));
            }
            if (givenAnswer.equals(question.getAnswer3()) && (givenAnswer.equals(question.getCorrect())))
            {
                viewHolder.checkBoxScoreThree.setTextColor(context.getResources().getColor(R.color.holo_blue_dark));
            }

            if (givenAnswer.equals(question.getAnswer4()) && !(givenAnswer.equals(question.getCorrect())))
            {
                viewHolder.checkBoxScoreFour.setTextColor(context.getResources().getColor(R.color.red));
            }
            if (givenAnswer.equals(question.getAnswer4()) && (givenAnswer.equals(question.getCorrect())))
            {
                viewHolder.checkBoxScoreFour.setTextColor(context.getResources().getColor(R.color.holo_blue_dark));
            }

            // check all of the correct answers
            if (question.getAnswer1().equals(question.getCorrect()))
            {
                viewHolder.checkBoxScoreOne.setChecked(true);
            }
            if (question.getAnswer2().equals(question.getCorrect()))
            {
                viewHolder.checkBoxScoreTwo.setChecked(true);
            }
            if (question.getAnswer3().equals(question.getCorrect()))
            {
                viewHolder.checkBoxScoreThree.setChecked(true);
            }
            if (question.getAnswer4().equals(question.getCorrect()))
            {
                viewHolder.checkBoxScoreFour.setChecked(true);
            }

        return convertView;
    }
验证出错:

 public View getView(int position, View convertView, ViewGroup parent)
    {
        // View rowView = convertView;
        final ViewHolder viewHolder;

        if (convertView == null)
        {
            LayoutInflater theInflater = LayoutInflater.from(context);
            convertView = theInflater.inflate(R.layout.score_layout, null);
            viewHolder = new ViewHolder();

            viewHolder.textViewScoreQuestion = (TextView) convertView.findViewById(R.id.textViewScoreQuestion);
            viewHolder.checkBoxScoreOne = (CheckBox) convertView.findViewById(R.id.checkBoxScoreOne);
            viewHolder.checkBoxScoreTwo = (CheckBox) convertView.findViewById(R.id.checkBoxScoreTwo);
            viewHolder.checkBoxScoreThree = (CheckBox) convertView.findViewById(R.id.checkBoxScoreThree);
            viewHolder.checkBoxScoreFour = (CheckBox) convertView.findViewById(R.id.checkBoxScoreFour);

            convertView.setTag(viewHolder);
        }
        else
        {
            viewHolder = (ViewHolder) convertView.getTag();
        }

        Questions question = questionsInOrder.get(position);
        String givenAnswer = answerChoices.get(position);

        viewHolder.textViewScoreQuestion.setText(question.getQuestion());
        viewHolder.checkBoxScoreOne.setText(question.getAnswer1());
        viewHolder.checkBoxScoreTwo.setText(question.getAnswer2());
        viewHolder.checkBoxScoreThree.setText(question.getAnswer3());
        viewHolder.checkBoxScoreFour.setText(question.getAnswer4());


        // display incorrect answers as red, and correct answers as blue
        if (givenAnswer.equals(question.getAnswer1()) && !(givenAnswer.equals(question.getCorrect())))
        {
            viewHolder.checkBoxScoreOne.setTextColor(context.getResources().getColor(R.color.red));
        }
        if (givenAnswer.equals(question.getAnswer1()) && (givenAnswer.equals(question.getCorrect())))
        {
            viewHolder.checkBoxScoreOne.setTextColor(context.getResources().getColor(R.color.holo_blue_dark));
        }

        if (givenAnswer.equals(question.getAnswer2()) && !(givenAnswer.equals(question.getCorrect())))
        {
            viewHolder.checkBoxScoreTwo.setTextColor(context.getResources().getColor(R.color.red));
        }
        if (givenAnswer.equals(question.getAnswer2()) && (givenAnswer.equals(question.getCorrect())))
        {
            viewHolder.checkBoxScoreTwo.setTextColor(context.getResources().getColor(R.color.holo_blue_dark));
        }

        if (givenAnswer.equals(question.getAnswer3()) && !(givenAnswer.equals(question.getCorrect())))
        {
            viewHolder.checkBoxScoreThree.setTextColor(context.getResources().getColor(R.color.red));
        }
        if (givenAnswer.equals(question.getAnswer3()) && (givenAnswer.equals(question.getCorrect())))
        {
            viewHolder.checkBoxScoreThree.setTextColor(context.getResources().getColor(R.color.holo_blue_dark));
        }

        if (givenAnswer.equals(question.getAnswer4()) && !(givenAnswer.equals(question.getCorrect())))
        {
            viewHolder.checkBoxScoreFour.setTextColor(context.getResources().getColor(R.color.red));
        }
        if (givenAnswer.equals(question.getAnswer4()) && (givenAnswer.equals(question.getCorrect())))
        {
            viewHolder.checkBoxScoreFour.setTextColor(context.getResources().getColor(R.color.holo_blue_dark));
        }

        // check all of the correct answers
        if (question.getAnswer1().equals(question.getCorrect()))
        {
            viewHolder.checkBoxScoreOne.setChecked(true);
        }
        if (question.getAnswer2().equals(question.getCorrect()))
        {
            viewHolder.checkBoxScoreTwo.setChecked(true);
        }
        if (question.getAnswer3().equals(question.getCorrect()))
        {
            viewHolder.checkBoxScoreThree.setChecked(true);
        }
        if (question.getAnswer4().equals(question.getCorrect()))
        {
            viewHolder.checkBoxScoreFour.setChecked(true);
        }

        return convertView;
    }
像这样初始化convertView。。它应该工作得很好

  • final
    移到
    ViewHolder
    中,您不需要它
  • convertView==null
    中添加:

    convertView = theInflater.inflate(R.layout.score_layout, null);
    
    应该好多了


  • ListView将正确显示所有信息。。。(包括以下两项建议)。。。是验证搞砸了。。。如果使用“convertView==null”方法,*.equals()就会停止工作。(基本上,我只是在改变文本颜色并勾选正确答案)。。。使用convertView==null。。。有几个项目勾选。。。如果我在{…}中移动验证,它会工作,但是列表会多次显示一个项目…好的,我解决了这个问题。。。我不得不将所有的复选标记文本颜色恢复为白色,每次都要取消它们的复选标记。。。这看起来正常吗?运气不好。。。同样的事情。。。列表视图显示。。。只是我的验证因为某些原因停止工作…:-(
    convertView = theInflater.inflate(R.layout.score_layout, null);