我现在正在注册碎片,需要转到loginfragment,这是我以前的碎片,但它不工作
requireActivity().onBackPressedDispatcher.addCallback(viewLifecycleOwner) {
Log.e("BackPressed","Onbackpressed")
findNavController().popBackStack(R.id.signupfragment,false)
}
popBackStack(R.id.signupfragment,false)
的第二个参数是popUpToInclusive
:
popUpToInclusive
:boolean:是否也应该弹出给定的目的地。
如果使用false
的popUpToInclusive
,则表示";将所有内容弹出到R.id.signupfragment
,但不是R.id.signupfragment
。
因此,如果您在R.id.signupfragment
,这将正确地不弹出任何内容(并返回false(。您想1(使用true
作为popUpToInclusive
,或者2(使用不带任何参数的popBackStack()
版本,因为这相当于从后堆栈中弹出当前目的地:
requireActivity().onBackPressedDispatcher.addCallback(viewLifecycleOwner) {
Log.e("BackPressed","Onbackpressed")
findNavController().popBackStack()
}
当然,Navigation已经设置了后退按钮,以便在您按下后退按钮时调用popBackStack()
,因此除了额外的日志记录外,您的调用完全没有必要。
另一种简单的方法是放置一个测试返回按钮并使用进行编码。
testBackButton.setOnClickListener {
val intent = Intent(this, ActivityThatYouWantToGo::class.java)
intent.flags = Intent.FLAG_ACTIVITY_CLEAR_TASK.or(Intent.FLAG_ACTIVITY_NEW_TASK)
startActivity(intent)
}
我不知道这是一个好答案,但它能正常工作
findNavController().popBackStack()
findNavController().popBackStack()
findNavController().navigate(R.id.loginFragment)