旋转屏幕时恢复数值

3

我已经通过编程创建了几个TextView。当屏幕旋转时,我会失去所有添加的文本视图及其文本值。最好的方法是什么,以保存它们并在旋转后进行恢复。我正在使用TableLayout,并添加行,每行有四个TextView。我不想阻止设备旋转。


从文档上看,动态创建的视图应该仍会自动保存它们的状态。但是您需要恢复您的模型,如果您从模型更新视图,那么看起来它们并没有被保存。请参阅http://developer.android.com/reference/android/app/Activity.html#onSaveInstanceState%28android.os.Bundle%29。 - Bastien Léonard
TextViews不会自动保存,因为用户无法编辑它们。然而,EditTexts会被保存。我也曾因此受过伤。 - Shawn Lauzon
2个回答

5

您应该使用onSaveInstanceState来保存您的状态,然后在onCreate中重新创建它。这适用于Activity和Fragment,但我认为方法的可见性略有不同(对于Fragment而言,它们是公共的)。

@Override
protected void onSaveInstanceState(Bundle outState) {
    super.onSaveInstanceState(outState);
    outState.putString("text1", text1.getText().toString());
    // do this for each of your text views
    // You might consider using Bundle.putStringArray() instead
}

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    // initialize all your visual fields        

    if (savedInstanceState != null) {
        text1.setText(savedInstanceState.getString("text1", ""));
        // do this for each of your text views
    }
}

请注意,这比使用onRetainNonConfigurationInstance更好;该方法用于实际跨旋转保留对象(例如位图),但您只想存储字符串,因此最好使用Bundle。另外,Fragments不支持onRetainNonConfigurationInstance;它已被setRetainInstance替换,并且由于同样的原因,您不想使用它。

0

您需要在设备旋转时保持状态。由于您的视图是动态创建的,因此您需要将所有这些信息存储在适合您的应用程序的“模型”中。Android开发者网站有更多信息。

“为了在运行时配置更改期间保留对象:

覆盖onRetainNonConfigurationInstance()方法以返回要保留的对象。 当您的活动再次创建时,请调用getLastNonConfigurationInstance()以恢复您的对象。”

请看这里:http://developer.android.com/guide/topics/resources/runtime-changes.html#RetainingAnObject


onRetainNonConfigurationInstance 用于在旋转时保留对象(例如位图),我认为这不是 OP 真正想要的。此外,Fragments 不支持 onRetainNonConfigurationInstance;它已被 setRetainInstance 替换,出于同样的原因,您也不想使用它。 - Shawn Lauzon

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接