步骤如下: 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");
}
}
答案 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
代替