1

这是代码的一部分:

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() 的值没有改变?谢谢

4

1 回答 1

2

您分配editText.getText()给一个变量。这意味着它的价值不会改变。

当您调用setText()时,原始文本将被新的 CharSequence 覆盖;返回的 Editable 的原始实例getText()不再是 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 拥有的实例。

文本视图.java

于 2018-11-13T15:40:58.443 回答