Je recommande d'utiliser un LifecycleObserver qui fait partie de la gestion des cycles de vie avec les composants Lifecycle-Aware d' Android Jetpack .
Je souhaite ouvrir et fermer le clavier lorsque le fragment / l'activité apparaît. Tout d'abord, définissez deux fonctions d'extension pour EditText. Vous pouvez les placer n'importe où dans votre projet:
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)
}
Définissez ensuite un LifecycleObserver qui ouvre et ferme le clavier lorsque l'activité / fragment atteint onResume()
ou 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()
}
}
Ajoutez ensuite la ligne suivante à l'un de vos fragments / activités, vous pouvez réutiliser le LifecycleObserver à tout moment. Par exemple pour un fragment:
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)
lifecycle.addObserver(EditTextKeyboardLifecycleObserver(WeakReference(myEditText)))
}