0

У меня возникли проблемы с моим ListView адаптера отображаются элементы в моей ArrayList ...Android ListView и пользовательский адаптер с ViewHolder

По большей части, это, кажется, работает ... мнение является правильным для каждого item ... однако, проверка, кажется, завинчивается, когда я реализую (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; 
    } 

Validation щурит:

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; 
    } 
+0

ListView отображает всю информацию правильно ... (с обоими приведенными ниже предложениями) ... Это проверка, которая закручивается ... это похоже на * .equals(), просто перестает работать, если Я использую метод «convertView == null». (В основном я просто меняю цвет текста и отмечаю правильный ответ) ... с convertView == null ... несколько элементов галочки ... и несколько элементов становятся красными вместо одного. – DeNitE

+0

Если я перемещаю валидацию внутри {...}, она работает, но затем список отображает один элемент несколько раз ... – DeNitE

+0

Хорошо, я решил проблему ... Мне пришлось оставить все цвета текста галочки обратно к белому и развязывать их каждый раз ... Кажется ли это нормальным? – DeNitE

ответ

0
convertView = theInflater.inflate(R.layout.score_layout, parent, false); 

Инициализировать ваш convertView как это .. Является ли должен работать безупречно.

+0

Не повезло ... То же самое ... – DeNitE

+0

какая ошибка/исключение вы получаете точно? – Android

0
  1. Удалить final в ViewHolder Вам это не нужно.
  2. В convertView == null оных:

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

    Это должно быть намного лучше.

+0

Не повезло ... То же самое ... Список отображает ... только моя проверка перестает работать по какой-то причине ... :-( – DeNitE

Смежные вопросы