【问题标题】:How to maintain the data even when the mode is changed from portrait to landscape and vice versa?即使模式从纵向更改为横向,如何维护数据,反之亦然?
【发布时间】:2012-09-03 04:42:07
【问题描述】:

我对我的活动有 25 个edittexts 和其他意见。我在layoutlayout-land中创建了不同的main.xml文件,所以各自的UI会根据切换模式(或者portrait 或 横向)。

但是在edittexts 中填充值后,如果我从portrait 更改为landscape,之前的值会丢失。所以,我的疑问是如何获取来自edittexts的值和恢复它们各自edittexts的值,即使在更改为其他模式。

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

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

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

【问题讨论】:

    标签: android mode data-loss


    【解决方案1】:

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

    通过在 manifest 中指定以下条件,可以检测到方向变化。

    android:configChanges="orientation"
    

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

    【讨论】:

    • 谢谢甘。会让你知道这是否有效。 Dialog重新出现问题怎么办?
    • 您能否详细说明弹出对话框。吐司是你做的还是系统生成的?
    • 在主要活动开始之前我只有一个对话框,要求用户选择一些选项。但是当我改变模式时,每次都会出现对话框。
    • 当方向改变时,onCreate 方法被再次调用,因此对话框被显示。如果您遵循我建议的想法,则可以避免这种情况。
    • 甘,我用过setContentView(R.layout.main);在 onConfigurationChanged() 方法中。因此视图更改为相应的模式。问题是我能够检索这些值,但我无法在编辑文本中设置这些值。请回复。
    【解决方案2】:

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

    【讨论】:

    • 嗨,阿芬。非常感谢您的回复。你的解释很清楚。但在这里我有大量数据。动态添加我的视图非常复杂。因为我有 25 个编辑文本和 10 个按钮来制作自定义键盘。是否有可能以另一种方式获得解决方案?你知道 onRetainNonConfigurationInstance() 是什么意思吗?它返回对象,但我需要值。
    • 我用过 setContentView(R.layout.main);在 onConfigurationChanged() 方法中。因此视图更改为相应的模式。问题是我能够检索这些值,但我无法在编辑文本中设置这些值。请回复。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-04-04
    • 1970-01-01
    • 2021-02-17
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多