Сохранить состояние RadioButton
Изучаю Android разработку не так давно. В моём приложении "ТЕСТ" при повороте экрана не сохраняется состояние группы кнопок RadioButton. То есть, я выбираю ответ из группы RadioButton и жму следующий вопрос, где уже новые ответы, поворачиваю экран, пересоздается Activity и вопросы начинаются с начала.
Я не могу понять, что нужно сохранять, именно... Группу Radio.g или переменную AnsText в которую помещён выбранный ответ при выборе RadioButton или, то и другое. Пробовал сохранить через метод savedInstanceState, но удалось только сохранить значение Flag.
Изучаю Android разработку на своём приложении, что бы интерес не проподал, а то изучать всё подряд не интересно, на практике всё лучше запоминается. Помогите дописать эту часть кода, для сохранения "выбора ответа", а то всё встало, я уже неделю туплю с этим...
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.RadioButton;
import android.widget.RadioGroup;
import android.widget.TextView;
import android.widget.Toast;
import android.content.Intent;
import android.media.SoundPool;
import android.media.AudioManager;
public class MainActivity extends AppCompatActivity {
private SoundPool mSound;
private SoundPool mSound2;
private SoundPool mSound3;
private int mMelody = 1;
private int mPlay;
private String qwe;
boolean start = false;
TextView tv, textView;
Button submitbutton, quitbutton;
RadioGroup radio_g;
RadioButton rb1, rb2, rb3, rb4;
final String LOG_TAG = "myLogs";
String questions[] = {
"Which method can be defined only once in a program?",
"Which of these is not a bitwise operator?",
"Which keyword is used by method to refer to the object that invoked it?",
"Which of these keywords is used to define interfaces in Java?",
"Which of these access specifiers can be used for an interface?",
"Which of the following is correct way of importing an entire package ‘pkg’?",
"What is the return type of Constructors?",
"Which of the following package stores all the standard java classes?",
"Which of these method of class String is used to compare two String objects for their equality?",
"An expression involving byte, int, & literal numbers is promoted to which of these?"
};
String answers[] = {"main method", "<=", "this", "interface", "public", "import pkg.*", "None of the mentioned", "java", "equals()", "int"};
String opt[] = {
"finalize method", "main method", "static method", "private method",
"&", "&=", "+", "-",
"import", "this", "catch", "abstract",
"Interface", "interface", "intf", "Intf",
"public", "protected", "private", "All of the mentioned",
"Import pkg.", "import pkg.*", "Import pkg.*", "import pkg.",
"int", "float", "void", "None of the mentioned",
"lang", "java", "util", "java.packages",
"equals()", "Equals()", "isequal()", "Isequal()",
"int", "long", "byte", "float"
};
int flag = 0;
public static int marks = 0, correct = 0, wrong = 0;
@Override
protected void onCreate(Bundle savedInstanceState) {
if (savedInstanceState != null){
flag = savedInstanceState.getInt("flag");
}
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
final TextView score = (TextView) findViewById(R.id.textView);
textView = (TextView) findViewById(R.id.user);
Intent intent = getIntent();//Принимаем данные от намерения Intent окна Activity
String name = intent.getStringExtra("myname");// Помещаем в переменную NAME преобразованную в строку через метод putExtra
submitbutton = (Button) findViewById(R.id.button3);
quitbutton = (Button) findViewById(R.id.buttonquit);
tv = (TextView) findViewById(R.id.tvque);
radio_g = (RadioGroup) findViewById(R.id.radio_g);
rb1 = (RadioButton) findViewById(R.id.radioButton);
rb2 = (RadioButton) findViewById(R.id.radioButton2);
rb3 = (RadioButton) findViewById(R.id.radioButton3);
rb4 = (RadioButton) findViewById(R.id.radioButton4);
tv.setText(questions[flag]);
rb1.setText(opt[0]);
rb2.setText(opt[1]);
rb3.setText(opt[2]);
rb4.setText(opt[3]);
submitbutton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
//ПРОВЕРКА Если ответ не выбран выводим сообщение "Выберете ответ"
if (radio_g.getCheckedRadioButtonId() == -1) {
//ПРОВЕРКА Если нажата Radio кнопка без выбора ответа, то выводим сообщение о просьбе выбрать ответ
Toast.makeText(getApplicationContext(), "Выберете ответ", Toast.LENGTH_SHORT).show();
return;
}
//Получаем даннеы о нажатой RadioButton. Помещаем в переменную ansText.То есть выбранный индекс из массива opt
RadioButton uans = (RadioButton) findViewById(radio_g.getCheckedRadioButtonId());
String ansText = uans.getText().toString();//В переменную ansText помещаем
//Toast.makeText(getApplicationContext(), ansText, Toast.LENGTH_SHORT).show();
if (ansText.equals(answers[flag])) {
correct++;
//Toast.makeText(getApplicationContext(), "Верно", Toast.LENGTH_SHORT).show();
} else {
wrong++;
//Toast.makeText(getApplicationContext(), "Не верно", Toast.LENGTH_LONG).show();
// AudioManager audioManager = (AudioManager) getSystemService(AUDIO_SERVICE);
//mPlay = mSound.play(mMelody, 1, 1, 1, 0, 1);
}
flag++;// Переменная Флаг увеличиваеться на 1 с каждым нажатием кнопки
if (score != null)
score.setText("" + correct);
if (flag < questions.length) {
tv.setText(questions[flag]);// Массиву questions передается значение переменной flag+1, выборка из массива индексов(Данных) при каждом щелчке кнопки
rb1.setText(opt[flag * 4]);//Массиву opt передается значение переменной flag+1, после чего происходит выборка из массива индексов(Данных) при каждом щелчке кнопки, и умножает на 4 для выбора нужного индекса
rb2.setText(opt[flag * 4 + 1]);//+ 1 Cмещение на необходимый индекс в массиве opt
rb3.setText(opt[flag * 4 + 2]);
rb4.setText(opt[flag * 4 + 3]);
marks = correct;
}
radio_g.clearCheck();//Обновление зажатой Radio кнопки
}
});
}
protected void onDestroy() {
super.onDestroy();
Log.d(LOG_TAG, "OnDestroy");
}
protected void onPause() {
super.onPause();
Log.d(LOG_TAG, "onPause");
}
protected void onRestart() {
super.onRestart();
Log.d(LOG_TAG, "onRestart");
}
protected void onResume() {
super.onResume();
Log.d(LOG_TAG, "onResume ");
}
protected void onStart() {
super.onStart();
Log.d(LOG_TAG, "onStart"+correct);
}
protected void onStop() {
super.onStop();
Log.d(LOG_TAG, "onStop");
}
protected void onSaveInstanceState(Bundle outState) {
super.onSaveInstanceState(outState);
outState.putInt("flag", flag);
Log.d(LOG_TAG, "onSaveInstanceState");
}
}```