我读到当应用程序即将停止或终止时,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”来尝试实现这一点,这是错误的方法.