如何解决EditText的getText方法的重载问题

时间:2019-05-12 13:56:41

标签: java android android-edittext

我正在尝试从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);

    }
}

我希望在运行时不读取多个“应在调用后打印……”,这时我应该期望甚至看不到它的一个实例,因为该方法尚未被调用。

1 个答案:

答案 0 :(得分:0)

EditText从TextView类和TextView类扩展,并在其构造函数中调用getText()方法。每当您创建自定义窗口小部件的任何实例时,都会发生这种情况,该实例是TextView的直接/间接子类,我想这就是原因,即使您的项目代码中没有调用自定义视图的getText(),也是如此。

如果要执行一些检查然后调用原始的getText()方法,以从中获取值,则不要在自定义类中覆盖该方法。在具有这些检查的自定义类中有一个普通方法,然后根据这些检查调用原始方法(以获取值),然后可以从普通方法返回值。