Android RadioGroup单选按钮更改ArrayAdapter列表视图中的状态

Android RadioGroup单选按钮更改ArrayAdapter列表视图中的状态,android,listview,radio-button,android-arrayadapter,radio-group,Android,Listview,Radio Button,Android Arrayadapter,Radio Group,我强调了在滚动浏览问题时,如何在listView中找到维护组中单选按钮状态的正确解决方案。当我选择一个单选按钮并滚动列表时,单选按钮被随机选择 public class QuizAdapter extends ArrayAdapter<Questions>{ public QuizAdapter(Context context, ArrayList<Questions> QuestionList){

我强调了在滚动浏览问题时,如何在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;
                }}
电脑问答课
公共类计算机问答活动{
@凌驾
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity\u computer\u Quike);
ArrayList computerQuestionsList=新的ArrayList();
ComputerQuestions列表。添加(新问题(“您应该从”、“病毒”、“定时炸弹”、“蠕虫”中保存您的计算机)”+
“上述全部”、“上述全部”);
计算机问题列表。添加(新问题(“转换绘图、打印文本或其他内容的光敏设备”)+
"数码影像是","键盘,"扫描器,"MRE,"鼠标,"扫描器",;
计算机问题列表。添加(新问题(“计算机的基本架构由”“约翰·冯·诺依曼”,
“查尔斯·巴贝奇”、“布莱斯·帕斯卡”、“花园摩尔”、“约翰·冯·诺依曼”);
计算机问题列表。添加(新问题(“一台计算机可以被分类多少代?”),
"3","4","5","6","5"));
计算机问题列表。添加(新问题(“第五代计算机基于”,
“程序智能”、“系统知识”、“全息图”、“人工智能”、“人工智能”);
QuizAdapter ComQuestionList=新的QuizAdapter(这是计算机问题列表);
最终ListView comList=(ListView)findViewById(R.id.comList);
comList.setAdapter(ComQuestionList);
View footer=LayoutInflater.from(getBaseContext()).flate(R.layout.footer_按钮,null,false);
comList.addFooterView(页脚);
}
}

此问题主要是由于适配器对象的重用

因此,您应该做的是,您应该以某种方式存储所选项目,并且当它在视图中调用
getView
方法时,您应该检查并更新它

示例:如果您选择第二个问题作为B,并且在屏幕上只有5个问题和答案。当您滚动更多时,适配器将尝试重用旧对象,可能是您的第8个问题将尝试重用您的第2个问题的对象,该问题已回答

对于您的情况:
当用户选择问题时,您可以在
适配器中创建一个
HashMap
,您可以更新
HashMap
。在
getView
中,检查每个问题是否已经存在,然后将单选按钮设置为选中,其他按钮设置为未选中。

感谢您的回答,但您能举个例子吗?
<?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);
            
        }
    
        }