Android: Save State of Radio Buttons

2019-01-28 06:06发布

Hi I'm trying to create an app for Android and in order to develop it i need to navigate through different pages and questions. For this task I have defined a radiogroup with some radiobuttons. What I want to obtain is each question answered radiobutton and when the user goes thorugh differentes pages the value can be retrieved. I have tried this code that consists of that if there is one selected radiobutton, there arent created new radiobuttons (radiobuttons checked false). However with this code, there is always a selected answer so there is always the same radiobutton selected. I will appreciate some help.

        radBotA.setOnCheckedChangeListener(radioCheckChangeListener);
            radBotB.setOnCheckedChangeListener(radioCheckChangeListener);
            radBotC.setOnCheckedChangeListener(radioCheckChangeListener);
            radBotD.setOnCheckedChangeListener(radioCheckChangeListener);
            radBotA.setOnClickListener(radioClickListener);
            radBotB.setOnClickListener(radioClickListener);
            radBotC.setOnClickListener(radioClickListener);
            radBotD.setOnClickListener(radioClickListener);
            if (radBotA.isChecked()){
                Answers[position]="A";
                }
            else if(radBotB.isChecked()){
           Answers[position]="B"; }            
            else if(radBotB.isChecked()){
                   Answers[position]="C"; } 
            else if(radBotC.isChecked()){
                   Answers[position]="D"; }     
            else if(radBotD.isChecked()){
                   Answers[position]="D"; } 
            else {
                radBotA.setChecked(false);
                radBotA.setChecked(false);
                radBotA.setChecked(false);
                radBotA.setChecked(false);
            }

        bPrevious.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {

                position = position -1; 
                questions.Previous();
                currentQuestion();







            }
        });
        bNext.setOnClickListener(new View.OnClickListener(){
            @Override

                public void onClick(View v) {
                position = position +1;
                questions.Next();       
                currentQuestion();





            }
        });

    private void currentQuestion() {
            if (position==0){
                bPrevious.setVisibility(View.GONE);
            }else{
                    bPrevious.setVisibility(View.VISIBLE);
                }
            if (position==nPreguntas-1){
                bNext.setVisibility(View.GONE);
            }else{
                bNext.setVisibility(View.VISIBLE);
            } 
            questions.currentQuestion(this, category);
            enunciado.setImageResource(Enunciado[position]);
            pregunta.setText(questions.getPregunta());
            final RadioButton radBotA = new RadioButton(this);
            final RadioButton radBotB = new RadioButton(this);
            final RadioButton radBotC = new RadioButton(this);
            final RadioButton radBotD = new RadioButton(this);

            radBotA.setText("A. " + questions.getRespuestaA());
            radBotB.setText("B. " + questions.getRespuestaB());
            radBotC.setText("C. " + questions.getRespuestaC());
            radBotD.setText("D. " + questions.getRespuestaD());
            String nprueba = "Item " +  questions.getId() + " de "+ nPreguntas;


            NombrePrueba.setText(nprueba);
            if (radBotA.isChecked()){
                Answers[position]="A";
                }
            else if(radBotB.isChecked()){
           Answers[position]="B"; }            
            else if(radBotB.isChecked()){
                   Answers[position]="C"; } 
            else if(radBotC.isChecked()){
                   Answers[position]="D"; }     
            else if(radBotD.isChecked()){
                   Answers[position]="D"; } 
            else {
                radBotA.setChecked(false);
                radBotA.setChecked(false);
                radBotA.setChecked(false);
                radBotA.setChecked(false);
            }
        }

thank you all for your time

Edit:

public void save(){
            SharedPreferences settings = getSharedPreferences("Answers", 0); 
              SharedPreferences.Editor e = settings.edit();


            e.putBoolean("A0",radBotA.isChecked());
            e.putBoolean("B0",radBotB.isChecked());
            e.putBoolean("C0",radBotC.isChecked());
            e.putBoolean("D0",radBotD.isChecked());
            e.putBoolean("A1",radBotA.isChecked());
            e.putBoolean("B1",radBotB.isChecked());
            e.putBoolean("C1",radBotC.isChecked());
            e.putBoolean("D1",radBotD.isChecked());
            e.putBoolean("A2",radBotA.isChecked());
            e.putBoolean("B2",radBotB.isChecked());
            e.putBoolean("C2",radBotC.isChecked());
            e.putBoolean("D2",radBotD.isChecked());
            e.putBoolean("A3",radBotA.isChecked());
            e.putBoolean("B3",radBotB.isChecked());
            e.putBoolean("C3",radBotC.isChecked());
            e.putBoolean("D3",radBotD.isChecked());
public void load(){
            SharedPreferences settings = getSharedPreferences("Answers", 0);
              boolean answerA0 = settings.getBoolean("A0", false); 
              boolean answerB0 = settings.getBoolean("B0", false);
              boolean answerC0 = settings.getBoolean("C0", false);
              boolean answerD0 = settings.getBoolean("D0", false);
              boolean answerA1 = settings.getBoolean("A1", false); 
              boolean answerB1 = settings.getBoolean("B1", false);
              boolean answerC1 = settings.getBoolean("C1", false);
              boolean answerD1 = settings.getBoolean("D1", false);
              boolean answerA2 = settings.getBoolean("A2", false); 
              boolean answerB2 = settings.getBoolean("B2", false);
              boolean answerC2 = settings.getBoolean("C2", false);
              boolean answerD2 = settings.getBoolean("D2", false);
              boolean answerA3 = settings.getBoolean("A3", false); 
              boolean answerB3 = settings.getBoolean("B3", false);
              boolean answerC3 = settings.getBoolean("C3", false);
              boolean answerD3 = settings.getBoolean("D3", false);

However I don't know how to continue. I v' thinking about the following code but it gives me error and where posicion is the "Page Number":

public void Test(){
        switch(posicion){
            case(0):
                if(answerA0==true){
                    e.putBoolean("A0",radBotA.isChecked());
                }
            }
        }
    }

3条回答
我只想做你的唯一
2楼-- · 2019-01-28 06:35

i just solved this problem , now i am able to save the current state of radio button on every next click and on every previous click i get back the radio state,even at the if the user changed the state by going to previous question or any of the question.

查看更多
Juvenile、少年°
3楼-- · 2019-01-28 06:45

I'm working on same application and the solution is that you have to store state of Radio button according to your question Number and for each question there is different key, like this:

final RadioButton rdSelection=(RadioButton)findViewById(mradioOptGroup.getCheckedRadioButtonId());
int child_index=mradioOptGroup.indexOfChild(rdSelection);

switch(mid)
{
    case 1: 
        sharedpreferences.putint("",child_index);
        break;
    case 2:
       sharedpreferences.putint("",child_index);
       break;
}

and do like this for all your questions on every next question

and on every previous question you have to store state of radio button of mid+1

where mid is your question number

查看更多
够拽才男人
4楼-- · 2019-01-28 06:51

If I understand you correctly, you want to retrieve some data in other activities. In that case the easiest way would be to use SharedPreferences.

After user answers the question (CheckBox's check state is being changed) you should store your information in SharedPreferences like this:

  SharedPreferences settings = getSharedPreferences("Answers", 0); // first argument is just a name of your SharedPreferences which you want to use. It's up to you how you will name it, but you have to use the same name later when you want to retrieve data.
  SharedPreferences.Editor editor = settings.edit();
  editor.putBoolean("questionA", radBotA.isChecked()); // first argument is a name of a data that you will later use to retrieve it and the second argument is a value that will be stored
  editor.putBoolean("questionB", radBotB.isChecked());
  editor.putBoolean("questionC", radBotC.isChecked());
  editor.putBoolean("questionD", radBotD.isChecked());

  editor.commit(); // Commit the changes

So now you have those information stored in your internal storage. In other activity, you can retrieve this information:

  SharedPreferences settings = getSharedPreferences("Answers", 0);
  boolean answerA = settings.getBoolean("questionA", false); // The second argument is a default value, if value with name "questionA" will not be found
  boolean answerB = settings.getBoolean("questionB", false);
  boolean answerC = settings.getBoolean("questionC", false);
  boolean answerD = settings.getBoolean("questionD", false);
查看更多
登录 后发表回答