簡體   English   中英

如何修復EditText的getText方法的覆蓋

[英]How to fix overriding of EditText's getText method

我試圖從EditText(擴展TextView)覆蓋getText()方法。 我需要對誰調用我的自定義方法進行一些檢查,如果所有檢查都通過,則調用“原始”EditText.getText()。

問題在於我的自定義方法多次被調用,直到向我拋出OOM錯誤,請注意我的自定義方法尚未從無處調用。

這是代碼:(前面提到的檢查不在這里,我只是粘貼了原始的EditText.getText實現作為替代,但問題仍然存在)

public class CustomEdit extends EditText {


    public CustomEdit(Context context) {
        this(context, null);
    }

    public CustomEdit(Context context, AttributeSet attrs) {
        super(context, attrs);
    }

    public CustomEdit(Context context, AttributeSet attrs, int defStyleAttr) {
        super(context, attrs, defStyleAttr);
    }

    @Override
    public Editable getText() {

        System.out.println("Should be printed once called...");

        CharSequence text = super.getText();

        if (text == null) {
            return null;
        }
        if (text instanceof Editable) {
            return (Editable) super.getText();
        }
        super.setText(text, BufferType.EDITABLE);
        return (Editable) super.getText();

    }

}

這是我的MainActivity:

public class MainActivity extends AppCompatActivity {

    CustomEdit s;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        s = findViewById(R.id.newEditText);

    }
}

我希望在運行時不要讀多個“應該打印一次......”,此時我應該不會看到它的一個實例,因為尚未調用該方法。

EditText從TextView類和TextView類擴展,在其構造函數中調用getText()方法。 每當您創建自定義窗口小部件的任何實例時,就會發生這種情況,該自定義窗口小部件是TextView的直接/間接子類,我想這就是原因,即使在項目代碼中調用了自定義視圖的getText(),也會調用它。

如果要執行某些檢查然后調用原始的getText()方法,要從中獲取值,請不要覆蓋自定義類中的方法。 在自定義類中有一個具有這些檢查的常規方法,然后根據這些檢查調用原始方法(獲取值),然后您可以從常規方法返回值。

暫無
暫無

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

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