Я фиксирую ключевые события (с внешней клавиатуры) в моем приложении.Я использую onKeyDown()
метод из Activity
.В моем приложении я переключаюсь между разными фрагментами.Если я нахожусь в нормальном Fragment
, то при нажатии кнопок активируется onKeyDown()
Activity.Но когда я использую DialogFragment
в качестве диалога, нажатие кнопки больше не вызывает Activity's
onKeyDown () `.
Вот пример кода:
class MainActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
}
fun onClick(view: View) {
// a) Key Event works if adding it via a fragment transaction by my own
// val fragment = MyDialogFragment.newInstance()
// val fragmentTransaction = supportFragmentManager.beginTransaction()
// fragmentTransaction.add(R.id.fr_container, fragment, fragment.javaClass.name)
// fragmentTransaction.commit()
// b) Key Event doesn't work if showing as a dialog
val fragment = MyDialogFragment.newInstance()
fragment.show(supportFragmentManager, fragment.javaClass.name)
}
override fun onKeyDown(keyCode: Int, event: KeyEvent?): Boolean {
Log.i(javaClass.name, "onKeyDown() keyCode: $keyCode")
return true
}
}
И мойдва фрагмента:
class MyNormalFragment : Fragment() {
override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? {
return inflater.inflate(R.layout.fragment_my_normal, container, false)
}
}
class MyDialogFragment : DialogFragment() {
override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? {
return inflater.inflate(R.layout.fragment_my_dialog, container, false)
}
companion object {
fun newInstance() = MyDialogFragment()
}
}
Как только я позвоню a) show()
, чтобы открыть MyDialogFragment
, ключевые события больше не фиксируются.Но если я открою MyDialogFragment
b) с помощью пользовательской транзакции фрагментов, то ключевые события все равно будут захвачены, но мой фрагмент больше не будет отображаться как диалог.
Что у меня естьсделать, чтобы событие также срабатывало при отображении моего диалогового окна?