2014-10-04 105 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之后设置它,它仍然是之前任何视图已被创建。