Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/powerbi/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
为什么不使用android导航组件的“返回”按钮_Android_Kotlin_Navigation Architecture - Fatal编程技术网

为什么不使用android导航组件的“返回”按钮

为什么不使用android导航组件的“返回”按钮,android,kotlin,navigation-architecture,Android,Kotlin,Navigation Architecture,这是我的Auth活动 class AuthActivity : AppCompatActivity() { private lateinit var navController: NavController override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) val binding = ActivityAuthBinding.

这是我的Auth活动

class AuthActivity : AppCompatActivity() {
    private lateinit var navController: NavController
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        val binding = ActivityAuthBinding.inflate(layoutInflater)
        setContentView(binding.root)

        navController = Navigation.findNavController(this, fragment.id)
        NavigationUI.setupActionBarWithNavController(this, navController)

    }

    override fun onSupportNavigateUp(): Boolean {
        return NavigationUI.navigateUp(navController, null)
    }

}
LoginFragment->如果登录成功,转到“AcceptCodeFragment”

在AcceptCodeFragment中,返回按钮不工作


两个片段使用相同的viewmodel。

您的问题不是后退按钮不起作用,而是
LiveData
用于状态,而不是像您的
loginResponse
这样的事件。由于
LiveData
用于事件,因此当您返回到
LoginFragment
时,它会重新传递以前的
响应。然后,这会再次触发您的
navigate()
调用,将您推回到您的
AcceptCodeFragment

根据说明,
LiveData
不能直接用于事件。相反,您应该考虑使用事件包装器或另一个解决方案(例如Kotlin <代码>流>代码>),这允许您的事件只被处理一次。
 viewModel.loginResponse.observe(viewLifecycleOwner, { response ->
            viewBinding.pbLogin.visible(response is Resource.Loading)
            when (response) {
                is Resource.Success -> {
                    viewBinding.tvResponse.text = response.value.message
                    val action = LoginFragmentDirections.actionLoginFragmentToAcceptCodeFragment()
                    findNavController().navigate(action)
                }
                is Resource.Error -> if (response.isNetworkError) {
                    requireView().snackBar("Check your connection")
                } else {
                    requireView().snackBar(response.errorBody.toString())
                }
            }