当Orientation更改时,onSaveInstanceState调用导致值Swap

时间:2014-11-21 09:12:31

标签: android

我有两个变量来保存设备方向。一个是当前问题编号作为整数,另一个是如果用户作弊的布尔值。它在我存储和检索sinle值时工作正常,同时存储它交换的值。

public class QuizActivity extends ActionBarActivity {

    // Logging members
    private static final String LOG_TAG = QuizActivity.class.getSimpleName();

    // The member of Saving the state for rotation of the device
    private static final String KEY_BOOLEAN = "index";
    private static final String KEY_INT = "index";

    // Adding members
    private Button mTrueButton;
    private Button mFalseButton;
    private Button mNextButton;
    private Button mBackButton;
    private TextView mQuestionTextView;
    private ImageButton mImgRightButton;
    private ImageButton mImgLeftButton;
    private Button mCheatButton;

    private TrueFalse[] mQuestionBank = new TrueFalse[] {
            new TrueFalse(R.string.question_oceans, true),
            new TrueFalse(R.string.question_mideast, false),
            new TrueFalse(R.string.question_africa, false),
            new TrueFalse(R.string.question_americas, true),
            new TrueFalse(R.string.question_asia, true)
    };

    private int mCurrentIndex = 0;

    // To save the CheatActivity returning result
    private boolean mIsCheater;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        Log.d(LOG_TAG, "QuizActivity onCreate(Bundle) called");
        setContentView(R.layout.activity_quiz);

        if(savedInstanceState != null) {
            mCurrentIndex = savedInstanceState.getInt(KEY_INT);
            mIsCheater = savedInstanceState.getBoolean(KEY_BOOLEAN);
        }
    }

    // Not to loose activity state when rotating the device
    @Override
    public void onSaveInstanceState(Bundle saveInstanceState) {
        Log.i(LOG_TAG, "onSaveIntanceState");

        saveInstanceState.putInt(KEY_INT, mCurrentIndex);
        saveInstanceState.putBoolean(KEY_BOOLEAN, mIsCheater);

        super.onSaveInstanceState(saveInstanceState);
    };

    // to get the result from child activity(Cheat activity)
    @Override
    protected void onActivityResult(int arg0, int arg1, Intent data) {
        if(data == null){
            return;
        }
        mIsCheater = data.getBooleanExtra(CheatActivity.EXTRA_ANSWER_SHOWN, false);
    };

}

2 个答案:

答案 0 :(得分:1)

KEY_INT和KEY_BOOLEAN具有相同的名称,相同的值。因此,当在捆绑中设置它们时,可能会覆盖另一个。使用不同的名称:

private static final String KEY_INT="intindex";
private static final String KEY_BOOLEAN="boolindex";

答案 1 :(得分:1)

你有相同的钥匙!改变这样的代码:

private static final String KEY_BOOLEAN = "index_BOOLEAN";
private static final String KEY_INT = "index_INT";