Edittext 的特别之处在于它可以保留值,但不能保留 Textview 和其他一些小部件,我们必须为它们使用 onSavedInstance() 方法。
EditText 背后的魔力是什么,特别是它可以保留值?
如果有人能告诉它内部是如何工作的。
它的内部工作原理,请指出解释此场景的代码部分。
EditText 背后的魔力是什么,特别是它可以保留
价值观?内部是如何工作的,请指出那部分代码
这解释了这种情况。
正是可选属性带来了差异。下列if
条件在TextView.onSaveInstanceState http://grepcode.com/file/repository.grepcode.com/java/ext/com.google.android/android/4.4.4_r1/android/widget/TextView.java?av=f#3482照顾它。
@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()
and getSelectionEnd()
回报-1
,由此save
变量持有假值。要使其在方向更改时保留其内容,请设置属性文本可选择 http://developer.android.com/reference/android/R.styleable.html#TextView_textIsSelectable为真。
Since EditText
默认情况下是可选的,getSelectionStart()
and getSelectionEnd()
总是返回值 >=0,因此save
变量保存真值并且内容被保存。
注意:默认情况下冻结文本 http://developer.android.com/reference/android/widget/TextView.html#attr_android:freezesText被禁用。因此mFreezesText
值是假的。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)