Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/181.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导航组件ActionBar启动/父事件处理_Android_Kotlin_Navigation_Fragment_Android Navigation - Fatal编程技术网

Android导航组件ActionBar启动/父事件处理

Android导航组件ActionBar启动/父事件处理,android,kotlin,navigation,fragment,android-navigation,Android,Kotlin,Navigation,Fragment,Android Navigation,所以我在我的应用程序中使用Android导航,我遇到了这种情况: 我有两个片段A->B,现在每当用户从B->A导航回来时,我想在返回事件之前显示一个警报 我遵循了答案,得到了这个解决方案: // code on fragment B's onViewCreated() requireActivity().onBackPressedDispatcher.addCallback(viewLifecycleOwner) { alert("Are you sure to quit?&q

所以我在我的应用程序中使用Android导航,我遇到了这种情况:

我有两个片段A->B,现在每当用户从B->A导航回来时,我想在返回事件之前显示一个警报

我遵循了答案,得到了这个解决方案:

// code on fragment B's onViewCreated()
requireActivity().onBackPressedDispatcher.addCallback(viewLifecycleOwner) {
    alert("Are you sure to quit?")
}
当我按下硬件后退按钮时,这个解决方案工作得很好,但是当我按下工具栏上的后退按钮时,回调不会被调用。请帮帮我,谢谢

这里是我的主要活动的导航设置:

override fun onCreate(savedInstanceState: Bundle?) {
    super.onCreate(savedInstanceState)
    supportActionBar!!.setDisplayHomeAsUpEnabled(true)

    navController = findNavController(R.id.nav_host_fragment_container)
    appBarConfiguration = AppBarConfiguration(navController.graph)
    setupActionBarWithNavController(navController, appBarConfiguration)
}

override fun onSupportNavigateUp(): Boolean {
    return navController.navigateUp(appBarConfiguration) || super.onSupportNavigateUp()
}

override fun onOptionsItemSelected(item: MenuItem): Boolean {
    return item.onNavDestinationSelected(navController) || super.onOptionsItemSelected(item)
}

您需要添加如下代码-

override fun onSupportNavigateUp(): Boolean {
    alert("Are you sure to quit?")
    return false
}

onCreateView
启用选项菜单的片段B中

setHasOptionsMenu(true)
并覆盖选择的选项项

override fun onOptionsItemSelected(item: MenuItem): Boolean {
    if (item.itemId == android.R.id.home) { // ActionBar back/parent button is pressed
        // onBackPressed() // to return back to Fragment A
    }
    return true
}

这是上升按钮,不是后退按钮。这些是不同的事情。