Android Jetpack 의 수명주기 인식 구성 요소로 수명주기 처리의 일부인 LifecycleObserver 를 사용하는 것이 좋습니다 .
Fragment / Activity가 나타날 때 키보드를 열고 닫고 싶습니다. 먼저 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()
}
}
그런 다음 Fragments / Activities에 다음 줄을 추가하면 언제든지 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
}