android - 使用 ArrayAdapter 替换列表项组件的 Android ListView
问题描述
请检查下面的最后更新,因为我发现了问题但不知道如何解决它
[更新:项目下载链接]非常小它只是一个示例并添加了问题类
我正在为测验创建一个带有 ArrayAdapter 的 ListView。每个问题都有 3 个答案作为单选按钮。问题是当我再次向下或向上滚动时,它会用滚动隐藏的另一个问题的答案替换第一个问题的答案,并用第一个问题的答案替换隐藏的问题答案。
所以假设我有 3 个答案的问题 1:1、2 和 3,并且有问题 5,这是第一个隐藏的问题,有三个答案 10,11 和 12。当我向下滚动查看问题 5 时,我发现它的答案是 1 ,2 和 3 然后当我向上滚动时,我发现问题 5 的答案是 10,11 和 12。为什么会发生这种情况以及如何解决?这是适配器
public class QuestionsAdapter extends ArrayAdapter<Questions> {
public QuestionsAdapter(Activity context, ArrayList<Questions> questions) {
super(context, 0, questions);
}
@NonNull
@Override
public View getView(int position, View convertView, ViewGroup parent) {
View listItemView = convertView;
if (listItemView == null) {
listItemView = LayoutInflater.from(getContext()).inflate(R.layout.list_item, parent, false);
}
//styling odd and even items
if (position % 2 == 1) {
listItemView.setBackgroundColor(getContext().getResources().getColor(R.color.odd));
} else {
listItemView.setBackgroundColor(getContext().getResources().getColor(R.color.even));
}
//used ViewHolder to prevent triggering position null issue
// final because it'll be used inside onClick
final ViewHolder viewHolder = new ViewHolder();
try {
final Questions currentQuestion = getItem(position);
viewHolder.questionTextView = (TextView) listItemView.findViewById(R.id.q_text);
viewHolder.questionTextView.setText(currentQuestion.getmQuestionTitle());
viewHolder.radioGroup = (RadioGroup) listItemView.findViewById(R.id.q_answers);
viewHolder.firstAnswer = (RadioButton) listItemView.findViewById(R.id.q_option1);
//MainActivity.answerIdis set to 0 and use it to set different id for each radio to find it inside onClick
viewHolder.firstAnswer.setText(currentQuestion.getQuestionAnswer1());
viewHolder.firstAnswer.setId(MainActivity.answerId);
//increading MainActivity.answerId by 1
MainActivity.answerId +=1;
viewHolder.secondAnswer = (RadioButton) listItemView.findViewById(R.id.q_option2);
viewHolder.secondAnswer.setText(currentQuestion.getQuestionAnswer2());
viewHolder.secondAnswer.setId(MainActivity.answerId);
MainActivity.answerId +=1;
viewHolder.thirdAnswer = (RadioButton) listItemView.findViewById(R.id.q_option3);
viewHolder.thirdAnswer.setText(currentQuestion.getQuestionAnswer3());
viewHolder.thirdAnswer.setId(MainActivity.answerId);
MainActivity.answerId +=1;
final TextView resultTextView = (TextView) listItemView.findViewById(R.id.result_text);
} catch (Exception e) {
e.printStackTrace();
}
return listItemView;
}
private class ViewHolder {
TextView questionTextView;
RadioGroup radioGroup;
RadioButton firstAnswer, secondAnswer,thirdAnswer;
}
}
问题类:
public class Questions {
private String mQuestionTitle,mQuestionAnswer1, mQuestionAnswer2, mQuestionAnswer3, mCorrect ;
public Questions(String questionTitle, String questionAnswer1, String questionAnswer2, String questionAnswer3,
String correct){
mQuestionTitle = questionTitle;
mQuestionAnswer1 = questionAnswer1;
mQuestionAnswer2 = questionAnswer2;
mQuestionAnswer3 = questionAnswer3;
mCorrect = correct;
}
public String getQuestionTitle(){
return mQuestionTitle;
}
public String getQuestionAnswer1(){
return mQuestionAnswer1;
}
public String getQuestionAnswer2(){
return mQuestionAnswer2;
}
public String getQuestionAnswer3(){
return mQuestionAnswer3;
}
public String getCorrect(){
return mCorrect;
}
}
[更新]尝试与第一个单选按钮一起再次调试和显示问题我发现问题标题与我与单选按钮一起显示的问题不同
String question = currentQuestion.getQuestionTitle();
String option_1 = currentQuestion.getQuestionAnswer1();
String option_2 = currentQuestion.getQuestionAnswer2();
String option_3 = currentQuestion.getQuestionAnswer3();
viewHolder.questionTextView = (TextView) listItemView.findViewById(R.id.q_text);
viewHolder.questionTextView.setText(question);
viewHolder.radioGroup = (RadioGroup) listItemView.findViewById(R.id.q_answers);
viewHolder.firstAnswer = (RadioButton) listItemView.findViewById(R.id.q_option1);
viewHolder.firstAnswer.setText(option_1 + ":" + question);
viewHolder.firstAnswer.setId(MainActivity.answerId);
MainActivity.answerId +=1;
真正的问题是, 当我将答案的 id 设置为 0 并开始将其增加 1 时,当我再次向下滑动时,它再次返回 0。如何保存最后一个整数值并不断增加它以将不同的 id 设置为单选按钮?
截图
解决方案
推荐阅读
- reactjs - 使用 Nextjs 内置工具创建类似于 'react-router-dom' 的路由
- anylogic - Anylogic Network - 代理不遵循路径
- java - 如何将 JSON 对象数组中的数据映射到我的列表
- python - 将 SetProperty 与子属性绑定
- python - 优化依赖于整个数据框的逻辑
- apache-spark - 使用 spark session 从 spark 访问 Hive 视图
- laravel - 在 nginx 中部署 Laravel 作为 apache 的反向代理
- javascript - 我想使用 tasks.length 为我的任务设置计数
- awk - 如何使用 awk 过滤字段遵循模式
- python - Python Multiprocessing:如何从具有列表下一个元素的一组进程中再次运行一个进程?