![](/img/trans.png)
[英]when setText on editText TextWatcher.onTextChanged not called
[英]What really happens when setText() is called on an EditText?
這是代碼的一部分:
editText.setText("Some Text", TextView.BufferType.EDITABLE);
Editable editable = (Editable) editText.getText();
// value of editable.toString() here is "Some Text"
editText.setText("Another Text", TextView.BufferType.EDITABLE);
// value of editable.toString() is still "Some Text"
為什么editable.toString()的值沒有改變? 謝謝
您editText.getText()
分配給變量。 這意味着它的價值不會改變。
當您調用setText()
,原始文本將被新的CharSequence覆蓋; getText()
返回的Editable的原始實例不再是TextView的一部分,因此您的editable
變量不再附加到TextView。
看一下TextView的getEditableText()
(這是EditText從getText()
調用的內容):
public Editable getEditableText() {
return (mText instanceof Editable) ? (Editable) mText : null;
}
如果mText
是可編輯對象,則它將返回它。 否則,它將返回null
。
setText()
最終進入setTextInternal()
:
private void setTextInternal(@Nullable CharSequence text) {
mText = text;
mSpannable = (text instanceof Spannable) ? (Spannable) text : null;
mPrecomputed = (text instanceof PrecomputedText) ? (PrecomputedText) text : null;
}
如您所見,它只是覆蓋了mText
字段,這意味着您的Editable實例不再是EditText的實例。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.