Как реализовать ввод в EditText через Button, а не клавиатуру?

Допустим в активити будет одна кнопка и неопределенное количество edittext. Когда мы нажимаем на edittext, клавиатура не появляется, но если мы нажмем на кнопку, то в edittext введется то, что мы определим в программе Java. Как такое сделать?


Ответы (1 шт):

Автор решения: Andrew

Как вариант можно сделать глобальную переменную которая будет соответствовать текущему выбранному полю для ввода:

private EditText currentView;

у данного типа виджетов есть слушатель фокуса:

editText.setOnFocusChangeListener(new OnFocusChangeListener() {
    @Override
    public void onFocusChange(View view, boolean hasFocus) {
        if (hasFocus) {
            ...
        } else {
            ...
        }
    }
});

вы можете сделать его общим для всех ваших виджетов поля ввода:

 private View.OnFocusChangeListener listener = (view, hasFocus) -> {
        if (hasFocus) {
            ...
        } else {
            ...
        }
    };

дальше в слушателе когда у вас есть фокус вы присваиваете currentView значение view: if (hasFocus) { currentView = (EditText) view; } else { ... }

и добавляете слушатель к каждому EditText которых у вас большое кол-во:

myEtxt1.setOnFocusChangeListener(listener);

ну и наконец у кнопки вы можете добавить ее включение/отключение:

myBtn.setEnabled(currentView != null);

и в слушателе нажатий устанавливаете текст в поле для ввода которое вы выбрали.

→ Ссылка