即使模式从纵向更改为横向,反之亦然,如何保持数据?

时间:2012-09-10 10:16:25

标签: android mode data-loss

我对我的活动有25 edittexts和其他观点。我在main.xmllayout中创建了不同的layout-land个文件,因此将根据切换模式显示相应的 UI 肖像横向)。

但在edittexts填充值后,如果我从人像更改为格局,之前的值丢失 。所以,我怀疑的是,即使在更改<之后,如何获取来自edittexts恢复各自edittexts的值的值 / strong>到其他模式。

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

已提及很多问题,例如link等,即使在 stackoverflow 上,但我无法找到问题的解决方案。请为此建议解决方案。

即使我有另一个问题。我在dialog首次启动时会弹出一个activity,在切换模式时我也不希望这个popup。请为这两个建议解决方案。如果有人需要代码段以获得更多说明,请告诉我们。我将用代码编辑我的问题。

2 个答案:

答案 0 :(得分:1)

如果您的数据较少,则可以使用onSavedInstanceStateonRestoreInstanceState保存并获取数据..有关详细信息,请点击此链接Saving Data

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

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
    }
}

答案 1 :(得分:0)

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

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

android:configChanges="orientation"

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