Lui*_*ndo 11 android bundle android-edittext
我读到Android会EditText在应用程序即将停止或终止时自动保存对象的内容.但是,在我的应用程序中,EditText当屏幕方向改变时,a的内容会丢失.
这是正常的行为吗?然后我必须用onSaveInstanceState/ 手动保存/恢复其内容onRestoreInstanceState吗?或者是否有更简单的方法告诉Android保存它还原它?
编辑:
我以EditText编程方式创建对象,而不是XML.事实证明这与问题有关(见下面接受的答案).
Mik*_* P. 25
这不是正常行为.
首先,确保EditText在布局XML中为控件分配了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);
Run Code Online (Sandbox Code Playgroud)
这将解决您的问题.
如果失败,您需要自己保存和恢复状态.
onSaveInstanceState像这样覆盖:
@Override
protected void onSaveInstanceState(Bundle outState) {
super.onSaveInstanceState(outState);
outState.putString("textKey", mEditText.getText().toString());
}
Run Code Online (Sandbox Code Playgroud)
然后恢复OnCreate:
public void onCreate(Bundle savedInstanceState) {
if(savedInstanceState != null)
{
mEditText.setText(savedInstanceState.getString("textKey"));
}
}
Run Code Online (Sandbox Code Playgroud)
此外,请不要android:configChanges="orientation"试图这样做,这是错误的方式去.
| 归档时间: |
|
| 查看次数: |
10859 次 |
| 最近记录: |