У меня FragmentActivity
и внутри 4 фрагмента.LoginFragment, RegistrationFragment, ForgottenPasswordFragment, LocalityFragment
.
Пользователь может переключаться между ними с помощью кнопки назад, но если вы нажмете back button
во фрагменте по умолчанию (LoginFragment
или LocalityFragment
), я хочу отключить его, потому что он вернет пользователя к SplashScreen
,
Итак, я нашел какой-то метод, как получить отображаемый фрагмент.Я пробовал fragment.userVisibleHint
и fragment.isVisible
.Они оба возвращают false, когда я нажимаю кнопку «Назад», даже если этот фрагмент в данный момент отображается на экране.
Код:
override fun onBackPressed() {
val activeLoginFragment = supportFragmentManager.findFragmentByTag("LOGIN_FRAGMENT") as LoginFragment?
val activeLocalityFragment = supportFragmentManager.findFragmentByTag("LOCALITY_FRAGMENT") as LocalityPickFragment?
createLog("onBackPressedLogin ", activeLoginFragment.toString())
createLog("onBackPressedLogin ", "LoginFragment is: " + activeLoginFragment?.userVisibleHint)
if ( (activeLoginFragment == null || !activeLoginFragment.userVisibleHint) || (activeLocalityFragment == null || !activeLocalityFragment.userVisibleHint) ){
createLog("onBackPressedLogin ", "not visible")
super.onBackPressed()
}
}
fun switchToForgottenPasswordFragment(){
val mPendingRunnable = Runnable {
fragmentTransaction = supportFragmentManager.beginTransaction()
fragmentTransaction.apply {
replace(R.id.startup_fragment_container, forgottenPasswordFragment)
addToBackStack(null)
commit()
}
}
val fragmentThread = Thread(mPendingRunnable)
fragmentThread.start()
}