То есть у меня есть две активности в одном задаются вопросы во втором можно подсмотреть ответ, но по возвращению в исходную активность при правильном ответе выводится сообщение о подсмотренном ответе, так вот проблема состоит в том что при повороте устройства сбрасывается значение ключа передаваемое через интент из активити с подсказкой.
Так вот как его сохранить?
Само приложение http://yadi.sk/d/BN-4TYIyMSvTU
Код MainActivity и CheatActivity:
MA
Код: Выделить всё
package com.example1.geoquizn;
import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.ImageButton;
import android.widget.TextView;
import android.widget.Toast;
public class MainActivity extends Activity {
private final static String TAG = "MainActivity";
private final static String KEY_INDEX = "index";
private final static String KEY_INDEX_ONE = "index_one";
private Button mTrueButton;
private Button mFalseButton;
private TextView mQuestionTextView;
private ImageButton mNextImageButton;
private ImageButton mLastImageButton;
private Button mBtnCheat;
private TrueFalse[] mQuestionBank = new TrueFalse[]{
new TrueFalse(R.string.question1, true),
new TrueFalse(R.string.question2, false),
new TrueFalse(R.string.question3, false),
new TrueFalse(R.string.question4, true),
new TrueFalse(R.string.question5, true),
new TrueFalse(R.string.question6, false),
};
private int mCurrentIndex = 0;
private boolean mIsCheater; //переменная для хранения значения вохвращаемого CheatActivity
@Override
protected void onActivityResult(int requestCode, int resultCode,Intent data){
if(data == null){
return;
}
mIsCheater = data.getBooleanExtra(CheatActivity.EXTRA_ANSWER_SHOW, true);
}
private void updateQuestion(){
int question = mQuestionBank[mCurrentIndex].getQuestion();
mQuestionTextView.setText(question);
}
private void checkAnswer(boolean userPressedTrue){
boolean answerIsTrue = mQuestionBank[mCurrentIndex].isTrueQuestion();
int messangeResId = 0;
if(mIsCheater){
messangeResId = R.string.spy;
}else{
if(userPressedTrue == answerIsTrue){
messangeResId = R.string.text_c;
}else{
messangeResId = R.string.text_inc;
}
}
Toast.makeText(this, messangeResId, Toast.LENGTH_SHORT).show();
}
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
mQuestionTextView = (TextView)findViewById(R.id.tvMain);
mQuestionTextView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
mCurrentIndex = (mCurrentIndex + 1)% mQuestionBank.length;
updateQuestion();
}
});
mTrueButton = (Button)findViewById(R.id.btnT);
mTrueButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
checkAnswer(true);
}
});
mFalseButton = (Button)findViewById(R.id.btnF);
mFalseButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
checkAnswer(false);
}
});
mNextImageButton = (ImageButton) findViewById(R.id.btnN);
mNextImageButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
mCurrentIndex = (mCurrentIndex + 1)% mQuestionBank.length;
updateQuestion();
}
});
mLastImageButton = (ImageButton)findViewById(R.id.btnL);
mLastImageButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
mCurrentIndex = (mCurrentIndex - 1)% mQuestionBank.length;
updateQuestion();
}
});
mBtnCheat = (Button)findViewById(R.id.btnCheat);
mBtnCheat.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
//здесь будет происходить запуск активности
Intent i = new Intent(MainActivity.this, CheatActivity.class);//объект типа class задает компонент
//который должен быть
//запущен из MainActivity
boolean answerIsTrue = mQuestionBank[mCurrentIndex].isTrueQuestion();//передача дополнения из MainActivity в CheatActivity
i.putExtra(CheatActivity.EXTRA_ANSWER_IS_TRUE, answerIsTrue);
startActivityForResult(i, 0);//используем для получения результата от дочерней активности
}
});
if(savedInstanceState != null){
mCurrentIndex = savedInstanceState.getInt(KEY_INDEX, 0);
}
updateQuestion();
}
public void onSaveInstanceState(Bundle savedInstanceState){
super.onSaveInstanceState(savedInstanceState);
Log.i(TAG, "onSaveInstanceState");
savedInstanceState.putInt(KEY_INDEX, mCurrentIndex);
}
@Override
public void onStart(){
super.onStart();
Log.d(TAG, "onStart() called");
}
@Override
public void onPause(){
super.onPause();
Log.d(TAG, "onPause() called");
}
@Override
public void onResume(){
super.onResume();
Log.d(TAG, "onResume() called");
}
@Override
public void onStop(){
super.onStop();
Log.d(TAG, "onStop() called");
}
@Override
public void onDestroy(){
super.onDestroy();
Log.d(TAG, "onDestroy() called");
}
}
Код: Выделить всё
package com.example1.geoquizn;
import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;
public class CheatActivity extends Activity {
private boolean mAnswerIsTrue;
private TextView mTvAnswer;
private Button mBtnAnswer;
public final static String EXTRA_ANSWER_IS_TRUE =
"com.example1.android.geoquizn.answer_is_true";//является ключем для чтение дополнения из MainActivity
public static final String EXTRA_ANSWER_SHOW = //является ключем для хранения информации была ли нажата кнопка "подсмотреть"
"com.example1.android.geoquizn.answer_show";
private void setAnswerShownResult(boolean isAnswerShow){//закрытый метод, создающий интент, помещющий в него дополнение
//и назначение кода результата
Intent data = new Intent();data.putExtra(EXTRA_ANSWER_SHOW, isAnswerShow);
setResult(RESULT_OK, data);
}
private final static String KEY_INDEX = "index";
@Override
public void onCreate(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_cheat);
setAnswerShownResult(false);
mAnswerIsTrue = getIntent().getBooleanExtra(EXTRA_ANSWER_IS_TRUE, false);//используем для чтения дополнения
mTvAnswer = (TextView)findViewById(R.id.tvMain2);
String text ="";
mBtnAnswer = (Button) findViewById(R.id.btnAnswer);
mBtnAnswer.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if(mAnswerIsTrue){
mTvAnswer.setText(R.string.btnT_text);
}else{
mTvAnswer.setText(R.string.btnF_text);
}
setAnswerShownResult(true);
}
});
if(savedInstanceState != null && savedInstanceState.containsKey(KEY_INDEX)){
text = savedInstanceState.getString(KEY_INDEX);
mTvAnswer.setText(text);
}
}
public void onSaveInstanceState(Bundle savedInstanceState){
//получим ссылку на текстовую переменную
TextView mTvAnswer = (TextView)findViewById(R.id.tvMain2);
//сохраняем его состояние
savedInstanceState.putString(KEY_INDEX,mTvAnswer.getText().toString());
//вызываем суперкласс для сохранения состояния видов
super.onSaveInstanceState(savedInstanceState);
}
}