gpt4 book ai didi

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

转载 作者:塔克拉玛干 更新时间:2023-11-01 21:51:54 26 4
gpt4 key购买 nike

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

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com