Как исправить переопределение метода getText EditText - PullRequest
0 голосов
/ 12 мая 2019

Я пытаюсь переопределить метод getText () из EditText (который расширяет TextView). Мне нужно сделать несколько проверок того, кто вызывает мой пользовательский метод, и если все проверки пройдены, вызовите «оригинальный» 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();

    }

}

Это моя основная активность:

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 голосов
/ 12 мая 2019

EditText расширяется от класса TextView и класса TextView с вызовом метода getText () в своем конструкторе.Это происходит всякий раз, когда вы создаете какой-либо экземпляр пользовательского виджета, который является прямым / косвенным подклассом TextView, я полагаю, что это причина того, что ваш пользовательский вид getText () вызывается, даже если он нигде не вызывается в коде вашего проекта.

Если вы хотите выполнить некоторые проверки, а затем вызвать оригинальный метод getText (), чтобы получить значение из него, не переопределяйте метод в вашем пользовательском классе.У вас есть обычный метод в вашем пользовательском классе, который имеет эти проверки, а затем вызывает оригинальный метод (чтобы получить значение) на основе этих проверок, после чего вы можете вернуть значение из вашего обычного метода.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...