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



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

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

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

我提到了很多问题,比如链接等,甚至在stackoverflow上,但我无法找到解决问题的方法。请对此提出解决方案。

就连我也有另一个问题。我有一个dialog,它在activity第一次启动时弹出,我不希望在切换模式时也出现在popup中。请为这两个问题提出解决方案。如果有人需要代码片段进行更多澄清,请告诉我。我将用代码编辑我的问题。

如果数据较少,可以使用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
    }
}

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

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

android:configChanges="orientation"

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

最新更新