在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://goo.gl/6TJy5
答案 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的内部状态的其他要求。