Как программно установить фокус (и отобразить клавиатуру) на моем EditText

Теперь это очень старая нить, с которой я столкнулся, но, как многие из них толкнули свой ответ, вот моя в надежде помочь кому-то с этим простым кодом.

var search_value = "This is a dummy sentence!";
var letter = 'a'; /*Can take any letter, have put in a var if anyone wants to use this variable dynamically*/
letter = letter[letter.length - 1];
var count;
for (var i = count = 0; i < search_value.length; count += (search_value[i++] == letter));
console.log(count);

Я не уверен, что это самое быстрое решение, но я предпочел его для простоты и не использовал regex (я просто не люблю их использовать!) [/ ​​g4]

150
задан dkmann 31 March 2017 в 19:26
поделиться

1 ответ

Я рекомендую использовать LifecycleObserver, который является частью Жизненные циклы Обработки с Осведомленными о жизненном цикле Компонентами из Реактивный ранец Android .

я хочу открыть и закрыть Клавиатуру, когда Фрагмент/Действие появляется. Во-первых, определите два дополнительные функции для EditText. Можно поместить их где угодно в проект:

fun EditText.showKeyboard() {
    requestFocus()
    val imm = context.getSystemService(Context.INPUT_METHOD_SERVICE) as InputMethodManager
    imm.showSoftInput(this, InputMethodManager.SHOW_IMPLICIT)
}

fun EditText.hideKeyboard() {
    val imm = context.getSystemService(Context.INPUT_METHOD_SERVICE) as InputMethodManager
    imm.hideSoftInputFromWindow(this.windowToken, 0)
}

Тогда определяют LifecycleObserver, который открывает и закрывает клавиатуру, когда Действие/Фрагмент достигает onResume() или onPause:

class EditTextKeyboardLifecycleObserver(private val editText: WeakReference<EditText>) :
    LifecycleObserver {

    @OnLifecycleEvent(Lifecycle.Event.ON_RESUME)
    fun openKeyboard() {
        editText.get()?.postDelayed({ editText.get()?.showKeyboard() }, 100)
    }

    @OnLifecycleEvent(Lifecycle.Event.ON_PAUSE)
    fun closeKeyboard() {
        editText.get()?.hideKeyboard()
    }
}

Тогда добавляют следующую строку к любому из Ваших Фрагментов/Операций, можно снова использовать LifecycleObserver любые времена. Например, для Фрагмента:

override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
        super.onViewCreated(view, savedInstanceState)

    // inflate the Fragment layout

    lifecycle.addObserver(EditTextKeyboardLifecycleObserver(WeakReference(myEditText)))

    // do other stuff and return the view

}
0
ответ дан 23 November 2019 в 21:33
поделиться
Другие вопросы по тегам:

Похожие вопросы: