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