这是代码的一部分:
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()的值没有改变?谢谢
答案 0 :(得分:2)
您为变量分配了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的实例。