【问题标题】:EditText not set after device rotation设备旋转后未设置 EditText
【发布时间】:2017-08-27 02:51:29
【问题描述】:

步骤如下: 1.运行app -> OK,EditText设置为“hello” 2.手动清除文本 3.旋转设备

我期望 EditText 再次设置为“hello”,因为活动是在旋转后重新创建的。但是,EditText 是空的。代码:

public class MainActivity extends AppCompatActivity {

EditText editText;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    editText = (EditText) findViewById(R.id.editText1);
    editText.setText("hello");
}
}

【问题讨论】:

标签: android android-edittext


【解决方案1】:

尝试在 xml 布局中将以下内容添加到您的 EditText 规范中:

android:saveEnabled="false"

【讨论】:

  • 修复错误 2 小时后,我找到了您的解决方案。
【解决方案2】:

您必须使用保存的实例状态手动执行此操作。这不仅仅是拯救你好。这是一个非常常见的用例。假设用户输入了一些东西,然后转动手机。如果由于任何原因,文本消失了,用户必须输入所有内容。所以你必须将文本保存在某个地方。

https://developer.android.com/guide/topics/resources/runtime-changes.html

所以你要做的是:

@Override
protected void onSaveInstanceState(Bundle outState) {
    super.onSaveInstanceState(outState);
    //Here savedStateValue is a global string
    savedStateValue = //Get the Text From Edit Text here;
    outState.putString("savedStateKEY", savedStateValue);
}

在 onCreate 中,执行如下操作:

    if (savedInstanceState != null) {
        //Restore the Text to EditText
        editText.setText(savedInstanceState.getString("savedStateKEY"));
    }

编辑 第二部分是为什么会发生。这是因为,您正在删除“Hello”文本并且在屏幕方向更改时,它正在恢复从初始状态传递的 Bundle 中的数据。在该捆绑包中,没有“Hello”,因为您已手动将其删除。 所以如果你正在使用

android:saveEnabled="false"

那么你就是让android不要在EditText中保存任何状态。

【讨论】:

  • 这是解决真正问题的唯一答案。涉及 configChanges 的所有其他答案只是告诉您通过不允许视图旋转来避免该问题。您最好只学习如何恢复此答案中提到的状态。
【解决方案3】:

在您的清单文件中为该活动添加 configChanges 约束。

【讨论】:

  • 你的意思是 android:configChanges="orientation" ?没有区别
  • 是的。添加方向|屏幕尺寸
【解决方案4】:

为该Activity 添加manifest.xml 文件

      <activity
        android:name=".SignUpActivity"
        android:configChanges="orientation|screenSize|keyboardHidden"      
        android:label="@string/app_name"
       />

【讨论】:

    【解决方案5】:

    EditText 在设备方向更改时持续存在,您需要改用TextView

    【讨论】:

    • 没有帮助。 TextView 不是 EditText 的替代品。如果您使用 EditText,您可能希望能够编辑文本。这里的答案是恢复EditText的状态。请参阅 Aman 的答案。
    猜你喜欢
    • 2018-01-21
    • 2020-09-24
    • 1970-01-01
    • 2017-05-29
    • 1970-01-01
    • 1970-01-01
    • 2011-11-09
    • 2012-05-18
    • 1970-01-01
    相关资源
    最近更新 更多