2014-01-17 83 views
1

所以我有一个奇怪的问题onSaveInstanceState和onRestoreInstanceState。 以下是我到目前为止所做的工作,并且完美地工作。通常称为方法,值保存并恢复正常。Android onRestoreInstanceState覆盖值

@Override 
public void onRestoreInstanceState(Bundle savedInstanceState) { 
    // Always call the superclass so it can restore the view hierarchy 
    super.onRestoreInstanceState(savedInstanceState); 

    // Restore value of members from saved state 
    mRawImgPath = savedInstanceState.getString(SAVE_STATE_RAW_IMG_PATH); 
    mProImgPath = savedInstanceState.getString(SAVE_STATE_PRO_IMG_PATH); 
} 

@Override 
public void onSaveInstanceState(Bundle savedInstanceState) { 
    // Always call the superclass so it can save the view hierarchy state 
    super.onSaveInstanceState(savedInstanceState); 

    // Save the user's current game state 
    savedInstanceState.putString(SAVE_STATE_RAW_IMG_PATH, mRawImgPath); 
    savedInstanceState.putString(SAVE_STATE_PRO_IMG_PATH, mProImgPath); 
} 

现在我想提高代码位与第三值我希望保存。

@Override 
public void onRestoreInstanceState(Bundle savedInstanceState) { 
    // Always call the superclass so it can restore the view hierarchy 
    super.onRestoreInstanceState(savedInstanceState); 

    // Restore value of members from saved state 
    mRawImgPath = savedInstanceState.getString(SAVE_STATE_RAW_IMG_PATH); 
    mProImgPath = savedInstanceState.getString(SAVE_STATE_PRO_IMG_PATH); 
    mLastState = savedInstanceState.getString(SAVE_STATE_LAST_STATE); 
} 

@Override 
public void onSaveInstanceState(Bundle savedInstanceState) { 
    // Always call the superclass so it can save the view hierarchy state 
    super.onSaveInstanceState(savedInstanceState); 

    // Save the user's current game state 
    savedInstanceState.putString(SAVE_STATE_RAW_IMG_PATH, mRawImgPath); 
    savedInstanceState.putString(SAVE_STATE_PRO_IMG_PATH, mProImgPath); 
    savedInstanceState.putString(SAVE_STATE_LAST_STATE, mLastState); 
} 

该方法仍然被调用完美,但它不会恢复正确的值了。 而不是将正确的值恢复到正确的变量,我得到SAVE_STATE_LAST_STATE恢复到所有三个变量(mRawImgPath,mProImgPathmLastState)。

我可以说的是,他们在保存在onSaveInstanceState()时具有正确的值,因此在保存时不会有错误的值。此外,我不会更改onCreate()的值,否则第一个解决方案(只有两个变量)将无法正常工作。 我真的不知道那里发生了什么。

如果感兴趣,这里的声明:

// Vars 
GPSTracker gps; 
String mRawImgPath = ""; // Path of the raw image 
String mProImgPath = ""; // Path of the processed image 
String mLastState = ""; 

// Save state variables 
static final String SAVE_STATE_RAW_IMG_PATH = ""; 
static final String SAVE_STATE_PRO_IMG_PATH = ""; 
static final String SAVE_STATE_LAST_STATE = ""; 

任何帮助表示赞赏。

回答

1
static final String SAVE_STATE_RAW_IMG_PATH = ""; 
static final String SAVE_STATE_PRO_IMG_PATH = ""; 
static final String SAVE_STATE_LAST_STATE = ""; 

你有空名有,更改为:

static final String SAVE_STATE_RAW_IMG_PATH = "SAVE_STATE_RAW_IMG_PATH"; 
static final String SAVE_STATE_PRO_IMG_PATH = "SAVE_STATE_PRO_IMG_PATH"; 
static final String SAVE_STATE_LAST_STATE = "SAVE_STATE_LAST_STATE"; 
+0

*荡*美丽。我不记得我必须声明变量的名称为值。非常感谢。 – user3207296

+0

不客气:) – isah