解释GoogleApi savedInstanceState

时间:2012-08-05 11:28:26

标签: android bundle

在Google Api示例代码中,他们有一个关于保存状态的非常简单的示例。我需要这个来处理屏幕旋转。

我的问题是我不明白调用方法getSavedText()setSaveText()的位置。我把调试器放在它们上但它永远不会被触发。整个事情只是“魔术”。我可以保存哪些其他东西?我在哪里可以找到解释魔法的文档

public class SaveState extends Activity {
@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_save_state);
    ((TextView)findViewById(R.id.msg)).setText(R.string.hello_world);
}
CharSequence getSavedText() {
    return ((EditText)findViewById(R.id.saved)).getText();
}
void setSavedText(CharSequence text) {
    ((EditText)findViewById(R.id.saved)).setText(text);
} 
}

链接 http://developer.android.com/resources/samples/ApiDemos/src/com/example/android/apis/app/SaveRestoreState.html

备用链接 http://goo.gl/6TJy5

1 个答案:

答案 0 :(得分:1)

这个Api演示样本很糟糕,因为当你阅读文档时,你会期望它会覆盖onSaveInstanceState()方法而不是在onCreate()或onRestoreInstanceState()中使用持久化状态,但它不会令人困惑。

首先,这个 Save&中没有使用getSavedText()和setSavedText()方法。恢复状态活动。它们在 LocalSample Instrumentation 示例中使用/调用。

忘记这两种方法可以删除它们。让我们来看看这个样本的工作原理;在后台Android调用 onRestoreInstanceState()并使所有UI视图将其状态保持为方法的Bundle参数。请调试代码并在旋转屏幕后检查此示例的onCreate()方法中的savedInstanceState参数。您将在该Bundle中看到R.id.saved EditText的旋转文本之前的。主要技巧是为什么EditText中的一个保存其状态而另一个不是因为EditText的 freezesText 属性。 freezesText属性使EditText / TextView在onSaveInstanceState方法中保存其状态。有关freezesText的更多信息,请查看here

删除android:freezesText =“true”或者从save_restore_state.xml使其为false或覆盖onRestoreInstanceState方法,并且不要调用super.onRestoreInstanceState()并观察它在旋转后失去其状态(配置更改)。

注意:您不必为此示例覆盖onRestoreInstanceState方法,而是为了保存您必须的Activity的内部状态的其他要求。