मैं एक LifecycleObserver का उपयोग करने की सलाह देता हूं जो कि Android Jetpack के Lifecycle-Aware Components के साथ हैंडलिंग जीवनचक्र का हिस्सा है ।
मैं फ्रेगमेंट / गतिविधि दिखाई देने पर कीबोर्ड को खोलना और बंद करना चाहता हूं। सबसे पहले, 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
}