gpt4 book ai didi

android - 当手机方向发生变化时,EditText 如何保留其值而不是 textview?

转载 作者:塔克拉玛干 更新时间:2023-11-02 08:23:31 25 4
gpt4 key购买 nike

Edittext 的特别之处在于它可以保留值,但不能保留 Textview 和其他一些小部件,我们必须为它们使用 onSavedInstance() 方法。

EditText 到底有什么神奇之处,它可以保留值?

如果有人能说出它在内部是如何工作的。

<----更新---->

它是如何在内部工作的,请指出解释这种情况的那部分代码。

最佳答案

What is the magic behind EditText specially that it can retain the values? How it works internally, Please point to that part of the code which explains this scenario.

带来差异的是可选择的属性。 TextView.onSaveInstanceState 中的以下 if 条件照顾好它。

@Override
public Parcelable onSaveInstanceState() {
Parcelable superState = super.onSaveInstanceState();

// Save state if we are forced to
boolean save = mFreezesText;
int start = 0;
int end = 0;

if (mText != null) {
start = getSelectionStart();
end = getSelectionEnd();
if (start >= 0 || end >= 0) {
// Or save state if there is a selection
save = true;
}
}

...
}

默认 TextView 无法被选中。因此 getSelectionStart()getSelectionEnd() 返回 -1save 变量保存假值。要使其在方向更改时保留其内容,请设置属性 textIsSelectable为真。

由于 EditText 默认是可选择的,getSelectionStart()getSelectionEnd() 总是返回值 >=0,由 save 变量保持真值,内容被保存。

注意:默认情况下 freezesText被禁用。因此 mFreezesText 值为 false。

关于android - 当手机方向发生变化时,EditText 如何保留其值而不是 textview?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15545211/

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