簡體   English   中英

在EditText上調用setText()時,真正發生了什么?

[英]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的實例。

TextView.java

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM