gpt4 book ai didi

android - RadioGroup 单选按钮在 ArrayAdapter ListView 中更改状态

转载 作者:行者123 更新时间:2023-11-29 02:38:55 26 4
gpt4 key购买 nike

我强调要找到一个合适的解决方案来在滚动浏览问题时维护 listView 中组中单选按钮的状态。每当我选择一个单选按钮并滚动列表时,单选按钮都会被随机选中。

public class QuizAdapter extends ArrayAdapter<Questions>{

public QuizAdapter(Context context, ArrayList<Questions> QuestionList){

super(context,0,QuestionList);
}

@NonNull
@Override
public View getView(final int position, View convertView, ViewGroup parent) {
View QuesView = convertView;
if(QuesView == null){
QuesView = LayoutInflater.from(getContext()).inflate(R.layout.listlayout,parent,false);
}
final Questions tempQues = getItem(position);

TextView question = (TextView) QuesView.findViewById(R.id.ques);
TextView opt1 = (TextView) QuesView.findViewById(R.id.opt1);
TextView opt2 = (TextView) QuesView.findViewById(R.id.opt2);
TextView opt3 = (TextView) QuesView.findViewById(R.id.opt3);
TextView opt4 = (TextView) QuesView.findViewById(R.id.opt4);;
RadioGroup rg = (RadioGroup) QuesView.findViewById(R.id.rg);
question.setText(tempQues.getQuestion());
opt1.setText(tempQues.getOpt1());
opt2.setText(tempQues.getOpt2());
opt3.setText(tempQues.getOpt3());
opt4.setText(tempQues.getOpt4());

rg.setOnCheckedChangeListener(new RadioGroup.OnCheckedChangeListener() {
@Override
public void onCheckedChanged(RadioGroup group, int checkedId) {

int radioButtonID = group.getCheckedRadioButtonId();
RadioButton radioButton = (RadioButton) group.findViewById(radioButtonID);
Questions question = getItem(position);
//for checking current answer and correct answer
Log.v("QuizAdapter",radioButton.getText().toString()+" "+question.getAns());
notifyDataSetChanged();
}
});


return QuesView;
}}

列表布局.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:padding="20dp">

<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:hint="Question?"
android:id="@+id/ques"
android:textStyle="bold"
android:textAppearance="?android:textAppearanceMedium"/>

<RadioGroup
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical"
android:paddingTop="8dp"
android:id="@+id/rg">


<RadioButton
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:hint="option 1"
android:id="@+id/opt1" />

<RadioButton
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:hint="option 2"
android:id="@+id/opt2" />


<RadioButton
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:hint="option 3"
android:id="@+id/opt3" />

<RadioButton
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:hint="option 4"
android:id="@+id/opt4" />
</RadioGroup>

</LinearLayout>

问题类

    public class Questions {

private String question;
private String opt1;
private String opt2;
private String opt3;
private String opt4;
private String ans;

public Questions(String question, String opt1, String opt2, String opt3, String opt4, String ans) {
this.question = question;
this.opt1 = opt1;
this.opt2 = opt2;
this.opt3 = opt3;
this.opt4 = opt4;
this.ans = ans;
}

public String getQuestion() {
return question;
}

public String getOpt1() {
return opt1;
}

public String getOpt2() {
return opt2;
}

public String getOpt3() {
return opt3;
}

public String getOpt4() {
return opt4;
}

public String getAns() {
return ans;
}
}

计算机测验课

    public class ComputerQuiz extends AppCompatActivity {

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_computer_quiz);

ArrayList<Questions> computerQuestionsList = new ArrayList<>();

computerQuestionsList.add(new Questions("You should save your computer from","Viruses","Time bombs","Worms", "" +
"All of the above","All of the above"));

computerQuestionsList.add(new Questions("A light sensitive device that converts drawing, printed text or other " +
"images into digital form is","Keyboard","Scanner","MRE","Mouse","Scanner"));

computerQuestionsList.add(new Questions("The basic architecture of computer was developed by","John Von Neumann",
"Charles Babbage","Blaise Pascal","Garden Moore","John Von Neumann"));

computerQuestionsList.add(new Questions("In how many generations a computer can be classified?",
"3","4","5","6","5"));

computerQuestionsList.add(new Questions("Fifth generation computers are based on",
"Programming Intelligence","System Knowledge","Holograms","Artificial Intelligence","Artificial Intelligence"));

QuizAdapter ComQuestionList = new QuizAdapter(this,computerQuestionsList);

final ListView comList = (ListView) findViewById(R.id.comList);
comList.setAdapter(ComQuestionList);

View footer = LayoutInflater.from(getBaseContext()).inflate(R.layout.footer_button,null,false);
comList.addFooterView(footer);

}

}

最佳答案

这个问题主要是因为你的Adapter对象重用了。

所以您应该做的是,您应该以某种方式存储所选项目,并且您应该在它调用 getView 时进行检查和更新。 View 中的方法。

示例:如果您将第 2 个问题选为 B,而您的屏幕上只有 5 个问题和答案。当您滚动更多时,Adapter 将尝试重用旧对象,可能是您的第 8 个问题将尝试重用您已经回答的第 2 个问题的对象。

针对您的情况:您可以创建一个 HashMap<String, String>在你的adapter当用户选择问题时,您可以更新 HashMap .和里面getView检查每个问题是否已经存在,然后设置单选按钮被选中,其他按钮未被选中。

关于android - RadioGroup 单选按钮在 ArrayAdapter ListView 中更改状态,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45526096/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com