当我使用导航时,如何转到上一个片段



我现在正在注册碎片,需要转到loginfragment,这是我以前的碎片,但它不工作

requireActivity().onBackPressedDispatcher.addCallback(viewLifecycleOwner) {
Log.e("BackPressed","Onbackpressed")
findNavController().popBackStack(R.id.signupfragment,false)
}

popBackStack(R.id.signupfragment,false)的第二个参数是popUpToInclusive:

popUpToInclusive:boolean:是否也应该弹出给定的目的地。

如果使用falsepopUpToInclusive,则表示";将所有内容弹出到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)

相关内容