У меня возникли проблемы с моим 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;
}
ListView отображает всю информацию правильно ... (с обоими приведенными ниже предложениями) ... Это проверка, которая закручивается ... это похоже на * .equals(), просто перестает работать, если Я использую метод «convertView == null». (В основном я просто меняю цвет текста и отмечаю правильный ответ) ... с convertView == null ... несколько элементов галочки ... и несколько элементов становятся красными вместо одного. – DeNitE
Если я перемещаю валидацию внутри {...}, она работает, но затем список отображает один элемент несколько раз ... – DeNitE
Хорошо, я решил проблему ... Мне пришлось оставить все цвета текста галочки обратно к белому и развязывать их каждый раз ... Кажется ли это нормальным? – DeNitE