2014-10-04 103 views
1

讓我告訴你我的代碼的兩個例子。如何將它放在哪裏我在哪裏如果(savedInstanceState!= null){} onCreate方法

example 1: 
    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     if (savedInstanceState != null){ 
      mCurrentIndex = savedInstanceState.getInt(KEY_INDEX, mCurrentIndex); 
     }; 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_quiz); 
    } 

例子2:

@Override 
protected void onCreate(Bundle savedInstanceState) {    
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_quiz); 
    if (savedInstanceState != null){ 
     mCurrentIndex = savedInstanceState.getInt(KEY_INDEX, mCurrentIndex); 
    }; 
} 

我不知道如何來也沒關係,我在我的代碼放在

if (savedInstanceState != null){ 
    mCurrentIndex = savedInstanceState.getInt(KEY_INDEX, mCurrentIndex); 
}; 

。我的假設是,setContentView顯示當前的佈局,如果mCrrentIndex更改,這是不同的。所以,如果我先設置內容視圖,然後再檢查mCurrentIndex有什麼int,那麼這很重要。事實證明,情況並非如此,我不知道爲什麼。誰能解釋一下?

+0

如果您想稍後使用,則必須先設置捆綁包。看看[onSaveInstanceState](http://developer.android.com/reference/android/app/Activity.html#onSaveInstanceState(android.os.Bundle))方法。 – skywall 2014-10-04 12:33:02

+0

onSaveInstanceState方法已在其他代碼部分中實現。問題是爲什麼if語句可以在senContentView方法之前或之後。 (兩種方式工作) – brumbrum 2014-10-04 12:36:54

回答

1

onCreate方法中,尚未創建視圖,它們在Activity lifecycle的後期階段被誇大。因此,當它們加載時,將使用新值mCurrentIndex,因爲即使您在呼叫setContentView之後設置它,它仍然是之前任何視圖已被創建。