0

我对我的活动有 25 条edittexts和其他意见。我在 和 中创建了不同的main.xml文件,因此将根据切换的模式纵向横向)显示相应的UIlayoutlayout-land

但是在填充值之后edittexts,如果我从纵向更改为横向,以前的值就会丢失。因此,我的疑问是即使在更改为其他模式后,如何从中获取edittexts恢复它们各自的值。edittexts

当然,我知道当我们切换模式时,会重新创建活动,这会导致数据丢失。我什Handling Runtime changes至在开发人员指南中都进行了修改,但是作为一个新手,我无法清楚地理解像onRetainNonConfigurationInstance()在返回对象时保存数据的方法一样,但是在我的应用程序中,即使在切换edittexts之后,我也需要输入的数字在它们各自的位置上.edittexts

即使在stackoverflow上也提到了很多问题,例如链接等,但我无法找到解决问题的方法。请为此提出解决方案。

甚至我还有另一个问题。我有一个在第一次启动dialog时弹出的窗口activity,我不希望popup切换模式时也出现这种情况。请为这两个提出解决方案。如果有人需要代码片段以获得更多说明,请告诉我。我将使用代码编辑我的问题。

4

2 回答 2

1

如果您的数据较少,您可以保存并使用它onSavedInstanceStateonRestoreInstanceState.. 有关详细信息,请通过此链接保存数据

但是如果您有大量数据,那么我必须说您不应该允许方向更改,您可以通过在清单文件中添加以下行来限制它:

android:configChanges="orientation|keyboardHidden"

上面的行修复了方向,但在这种情况下,您layout-land将无法工作,但您可以在onConfigurationChanged()方法内动态处理或重新定位您的视图

    @Override
public void onConfigurationChanged(Configuration newConfig)
{
    super.onConfigurationChanged(newConfig);

    if (newConfig.orientation == Configuration.ORIENTATION_LANDSCAPE) {
        align_landscape(); // align your view dynamically here for landscape
    } else if (newConfig.orientation == Configuration.ORIENTATION_PORTRAIT) {
        align_portrait(); // align your view dynamically here for portrait
    }
}
于 2012-09-10T12:07:56.443 回答
0

您可以在方向更改时存储编辑文本值,然后切换到新布局并分配保存的值。

通过在清单中指定以下条件,您可以检测方向变化。

android:configChanges="orientation"

在您的 onConfigurationChanged() 方法中,存储各个字段的值,然后您可以使用setRequestedOrientation(int requestedOrientation)将更新为自定义布局的方法更改方向,然后恢复字段的值。

于 2012-09-10T10:43:55.837 回答