android – EditText不会自动保存在屏幕方向更改上

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

上一篇:公开通过webpack捆绑的javascript全局变量


下一篇:保存和恢复视图状态android