恢复屏幕旋转的值

时间:2012-01-30 00:18:49

标签: android

我以编程方式创建了几个TextView。当屏幕旋转时,我会松开所有添加的文本视图及其文本值。什么是保存它们并在旋转后恢复的最佳方法。我正在使用tablelayout并添加行,每行有四个textview。我不想阻止设备旋转。

2 个答案:

答案 0 :(得分:4)

您应该使用onSaveInstanceState来保存您的状态,然后在onCreate中重新创建它。这适用于活动和片段,但我相信这些方法的可见性有点不同(它们对于片段是公开的)。

@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替换,并且您不希望出于同样的原因使用它。

答案 1 :(得分:0)

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

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

重写onRetainNonConfigurationInstance()方法以返回您想要保留的对象。 再次创建活动时,请调用getLastNonConfigurationInstance()以恢复对象。“

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