的EditText数据丢失上旋转设备(EditText data is lost on rotati

2019-09-21 09:51发布

好球员,我用它做。 我一直在google搜索最后2天,但我无法找到确切的解决方案。 每个人都在谈论configChanges以及所有那些陈词滥调事情,似乎并不在我的情况下工作。

我有一个登录屏幕,该屏幕由2个EditTexts。 现在,这个登录界面有纵向和横向的方向不同的布局。 所以我不得不创建布局文件夹,一个login.xml和布局,土地文件夹中其他login.xml。 并支持方向改变我overrid在LoginActivity类onConfigurationChanged()方法。 在这种方法我称之为的setContentView(R.layout.login)方法,以便适当login.xml每天来回方向设置布局。

这一切后我在清单文件中定义下面还有:

android:configChanges="orientation|keyboardHidden"

不过还是我对着著名的老问题。 如果在EDITTEXT任何文字和设备旋转,该文本丢失。 我不想失去这个文本。 是否有可能或不? 我已阅读,我们可以使用的onSaveInstanceState(捆绑savedInstanceState)方法做到这一点,我甚至已尝试过,但它din't为我工作。 请帮忙。 提前致谢。

Answer 1:

使用put方法来存储的onSaveInstanceState中值:

protected void onSaveInstanceState(Bundle extra) {
  super.onSaveInstanceState(extra);
  extra.putString("text", "your text here");
}

和还原的onCreate值:

public void onCreate(Bundle extra) {
  if (extra != null) {
    String value = extra.getString("text");
  }
}

编辑(什么实际工作):

尝试删除Android:configChanges = “方向| keyboardHidden” 从清单。

祝好运!



Answer 2:

首先删除所有onConfigurationChangedconfigChanges=orientation你做的东西-这个解决方案是弱者。 然后执行以下操作:

  1. 覆盖onRetainNonConfigurationInstance(),使其返回需要保存在设备旋转的文本。 您可能需要创建一个包含这些值的简单对象 - 例如:

     public class TextObject { public String loginText; public String passwordText; } 
  2. 在的onCreate,初始化您的意见后,尝试通过获取已保存的对象从旋转getLastNonConfigurationInstance() 这将返回null如果它是你通过去第一次onCreate ,所以你需要做一个空检查。 例:

     TextObject mySavedTextObject = (TextObject) getLastNonConfigurationInstance(); if(mySavedTextObject!=null) { myLoginEditText.setText(mySavedTextObject.loginText); myPasswordEditText.setText(mySavedTextObject.passwordText); } 


Answer 3:

在https://github.com/jcraane/AndroidBundleState你会发现一个很简单的库处理的状态逻辑为您服务。 所有你需要做的就是注释你的字段。

@BundleState( “STATE_NAME”)私人字符串名称; 该库将在rotationChange后场为您还原值。



Answer 4:

只需设置此为您的登录文本和密码文本

textView.setSaveEnabled(假);



Answer 5:

在你的代码点(时间),其中定向即将改变,实现这个:

this.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);

但是,这有屏幕改变方向之前,例如在从设备摄像头返回到您的应用程序放置,常常发生在应用程序的回报和再次改变方向,没有任何理由。

和不`吨忘记,以纪念我=)

祝好运。



文章来源: EditText data is lost on rotating the device