【发布时间】:2018-08-13 05:24:25
【问题描述】:
我正在尝试使用列表视图自定义适配器开发一个测验应用程序,但是当我选择一个单选按钮并向下滚动时,我看到另一个单选按钮被自动选中,我使用了视图持有者,但我不知道如何解决这个问题问题。
我的自定义适配器的代码。
问题适配器
public class QuestionAdapter2 extends ArrayAdapter<Question> {
Context context;
ArrayList<Question> questionArrayList;
public QuestionAdapter2(Context context, ArrayList<Question> questionArrayList) {
super(context, R.layout.question_listitem, questionArrayList);
this.context = context;
this.questionArrayList = questionArrayList;
}
static class ViewHolder {
protected TextView question;
protected RadioButton choice1;
protected RadioButton choice2;
protected RadioButton choice3;
protected RadioButton choice4;
}
@NonNull
@Override
public View getView(final int position, @Nullable View convertView, @NonNull ViewGroup parent) {
ViewHolder viewHolder = null;
if(convertView == null)
{
LayoutInflater inflater=(LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
convertView=inflater.inflate(R.layout.question_listitem,parent,false);
viewHolder = new ViewHolder();
viewHolder.question = convertView.findViewById(R.id.question);
viewHolder.choice1 = convertView.findViewById(R.id.choice1);
viewHolder.choice2 = convertView.findViewById(R.id.choice2);
viewHolder.choice3 = convertView.findViewById(R.id.choice3);
viewHolder.choice4 = convertView.findViewById(R.id.choice4);
viewHolder.choice1.setSelected(false);
viewHolder.choice2.setSelected(false);
viewHolder.choice3.setSelected(false);
viewHolder.choice4.setSelected(false);
convertView.setTag(viewHolder);
}
else
{
viewHolder = (ViewHolder) convertView.getTag();
}
viewHolder.choice1.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
questionArrayList.get(position).setChoice1Selected(true);
questionArrayList.get(position).setChoice2Selected(false);
questionArrayList.get(position).setChoice3Selected(false);
questionArrayList.get(position).setChoice4Selected(false);
Toast.makeText(context, ""+Integer.toString(position), Toast.LENGTH_SHORT).show();
}
});
viewHolder.choice2.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
questionArrayList.get(position).setChoice1Selected(false);
questionArrayList.get(position).setChoice2Selected(true);
questionArrayList.get(position).setChoice3Selected(false);
questionArrayList.get(position).setChoice4Selected(false);
Toast.makeText(context, ""+Integer.toString(position), Toast.LENGTH_SHORT).show();
}
});
viewHolder.choice3.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
questionArrayList.get(position).setChoice1Selected(false);
questionArrayList.get(position).setChoice2Selected(false);
questionArrayList.get(position).setChoice3Selected(true);
questionArrayList.get(position).setChoice4Selected(false);
Toast.makeText(context, ""+Integer.toString(position), Toast.LENGTH_SHORT).show();
}
});
viewHolder.choice4.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
questionArrayList.get(position).setChoice1Selected(false);
questionArrayList.get(position).setChoice2Selected(false);
questionArrayList.get(position).setChoice3Selected(false);
questionArrayList.get(position).setChoice4Selected(true);
Toast.makeText(context, ""+Integer.toString(position), Toast.LENGTH_SHORT).show();
}
});
viewHolder.question.setText(questionArrayList.get(position).getQuestion().toString());
viewHolder.choice1.setText(questionArrayList.get(position).getCoice1().toString());
viewHolder.choice2.setText(questionArrayList.get(position).getCoice2().toString());
viewHolder.choice3.setText(questionArrayList.get(position).getCoice3().toString());
viewHolder.choice4.setText(questionArrayList.get(position).getCoice4().toString());
viewHolder.choice1.setSelected(questionArrayList.get(position).getChoice1Selected());
viewHolder.choice2.setSelected(questionArrayList.get(position).getChoice2Selected());
viewHolder.choice3.setSelected(questionArrayList.get(position).getChoice3Selected());
viewHolder.choice4.setSelected(questionArrayList.get(position).getChoice4Selected());
return convertView;
}
}
这是我的 xml 文件。
XML
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical">
<TextView
android:id="@+id/question"
android:text="Question"
android:textSize="30sp"
android:layout_width="match_parent"
android:layout_height="wrap_content" />
<RadioGroup
android:id="@+id/radioGroup"
android:layout_width="match_parent"
android:layout_height="wrap_content">
<RadioButton
android:id="@+id/choice1"
android:text="choice1"
android:textSize="18sp"
android:layout_width="match_parent"
android:layout_height="wrap_content" />
<RadioButton
android:id="@+id/choice2"
android:text="choice2"
android:textSize="18sp"
android:layout_width="match_parent"
android:layout_height="wrap_content" />
<RadioButton
android:id="@+id/choice3"
android:text="choice3"
android:textSize="18sp"
android:layout_width="match_parent"
android:layout_height="wrap_content" />
<RadioButton
android:id="@+id/choice4"
android:text="choice4"
android:textSize="18sp"
android:layout_width="match_parent"
android:layout_height="wrap_content" />
</RadioGroup>
</LinearLayout>
【问题讨论】:
-
你知道回收站视图。
-
你为什么不使用广播组?
-
我正在使用广播组,您可以从我提供的视频中查看。
-
那么对于单选组,为什么要为所有 4 个单选按钮设置值?单选组默认只有一个选择
-
如果您正在执行此代码。那么你对 RadioGroup 的功能了解不够。
标签: java android xml custom-adapter