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

最佳答案

您应该使用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要好;该方法实际上用于在旋转(例如位图)之间保留对象,但是您只想存储字符串,因此最好使用捆绑包。另外,片段不支持onretainnonconfigurationinstance;它已被setretaininstance替换,并且您不希望出于相同的原因使用它。

07-26 09:33
查看更多