设备旋转后未设置EditText

时间:2017-08-26 17:50:40

标签: android android-edittext

步骤如下:  1.运行应用程序 - >好的,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");
}
}

5 个答案:

答案 0 :(得分:3)

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

android:saveEnabled="false"

答案 1 :(得分: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中保存任何状态。

答案 2 :(得分:0)

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

答案 3 :(得分:-1)

manifest.xml

Activity文件中添加
      <activity
        android:name=".SignUpActivity"
        android:configChanges="orientation|screenSize|keyboardHidden"      
        android:label="@string/app_name"
       />

答案 4 :(得分:-1)

EditText持续更改设备方向,您需要使用TextView代替