android - EditText 不会在屏幕方向更改时自动保存

标签 android android-edittext bundle

我读到当应用程序即将停止或终止时,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/

相关文章:

android - 如何向用户的设备发送新的更新通知

java - 在 Android Java 中将位保存在字节流中?

android - 将 EditText 中的 int 类型变量插入到 Android 中的 SQL 数据库中

android - 如何在使用 InputMethodManager 隐藏后恢复软键盘

jquery - Asp.net Bundle {version} 包含 min.js 和 non-min 吗?

android - 根据纬度和经度的当前位置

android - Android Studio中的同步项目失败

android - 具体的 EditText Android

css - bundle 不渲染样式

android - 在 Android 中将参数传递给 AlertDialog