我读到当应用程序即将停止或终止时,Android 会自动保存 EditText
对象的内容。但是,在我的应用程序中,EditText
的内容会在屏幕方向更改时丢失。
这是正常行为吗?然后我是否必须使用 onSaveInstanceState
/onRestoreInstanceState
手动保存/恢复其内容?或者是否有更简单的方法告诉 Android 保存它并恢复它?
编辑:
我以编程方式创建 EditText
对象,而不是在 XML 中。事实证明这与问题有关(请参阅下面接受的答案)。
最佳答案
这不是正常行为。
首先,确保在布局 XML 中为 EditText
控件分配了 ID。
编辑 1: 它只需要一个 ID,句点。如果您以编程方式执行此操作,除非它有 ID,否则它将丢失状态。
所以用这个作为一个快速而肮脏的例子:
// Find my layout
LinearLayout mLinearLayout = (LinearLayout) findViewById(R.id.ll1);
// Add a new EditText with default text of "test"
EditText testText = new EditText(this.getApplicationContext());
testText.setText("test");
// This line is the key; without it, any additional text changes will
// be lost on rotation. Try it with and without the setId, text will revert
// to just "test" when you rotate.
testText.setId(100);
// Add your new EditText to the view.
mLinearLayout.addView(testText);
这将解决您的问题。
如果失败,您需要自己保存和恢复状态。
像这样覆盖 onSaveInstanceState
:
@Override
protected void onSaveInstanceState(Bundle outState) {
super.onSaveInstanceState(outState);
outState.putString("textKey", mEditText.getText().toString());
}
然后在OnCreate
中恢复:
public void onCreate(Bundle savedInstanceState) {
if(savedInstanceState != null)
{
mEditText.setText(savedInstanceState.getString("textKey"));
}
}
此外,请不要使用 android:configChanges="orientation"
来尝试完成此操作,这是错误的方法。
关于android - EditText 不会在屏幕方向更改时自动保存,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19234653/