【问题标题】:android: save error state on change orientationandroid:在更改方向时保存错误状态
【发布时间】:2011-12-01 13:45:28
【问题描述】:

我制作了一个带有动态字段验证的登录表单。我有 3 个字段用户名、电子邮件和密码,所有这些字段都是必需的。当字段长度=0时,我设置错误

editText.setError( getText(R.string.cannot_be_blank) );

这段代码工作正常,但是当我改变方向时,所有错误都消失了 如何保存错误状态?

谢谢。

【问题讨论】:

    标签: android orientation android-edittext savestate


    【解决方案1】:

    当方向改变时,框架将通过调用onCreate(Bundle savedInstanceState) 重新创建活动。在方向切换之前,如果 onSaveInstanceState(Bundle outState) 方法在您的活动中被覆盖,则将调用它。

    您可以保存传递给onSaveInstanceState 方法的Bundle 中的错误状态。此捆绑包作为savedInstanceState 捆绑包传递给您的onCreate() 方法。

    因此,您需要在 Activity 中重写 onSaveInstanceState 方法,如下所示(保存错误状态):

    @Override
    protected void onSaveInstanceState(Bundle outState) {
        outState.putBoolean("errorOccurred", errorState);
        super.onSaveInstanceState(outState);
    }
    

    然后在您的onCreate 方法中检查savedInstateState Bundle 是否为空。如果没有,您可以使用以下代码从中检索值:

    boolean errorOccurred = false;  
    if (savedInstanceState != null) {
        errorOccurred = savedInstanceState.getBoolean("errorOccurred"); 
    }
    

    【讨论】:

      【解决方案2】:

      当方向改变时,Android 框架会销毁 Activity,然后为新的方向创建一个新的。所以你所有的状态都丢失了。

      使用 SharedPreferences 存储和恢复您的状态和 TextEdit 值。

      【讨论】:

      • 对于基于 TextEdit 值的错误消息,最好在 onResume 中重新评估而不是保存状态...
      【解决方案3】:

      当您转动设备时,您的Activity 会贯穿其生命周期,以处理布局必须从纵向变为横向的事实。

      您应该查看有关如何Handle Runtime Changes 的开发者文档。

      【讨论】:

        猜你喜欢
        • 2015-11-23
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-07-10
        • 1970-01-01
        • 1970-01-01
        • 2013-12-13
        相关资源
        最近更新 更多