首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用JetpackNavigation组件从BottomSheetDialogFragment导航到另一个片段

如何使用JetpackNavigation组件从BottomSheetDialogFragment导航到另一个片段
EN

Stack Overflow用户
提问于 2021-09-13 15:41:47
回答 2查看 439关注 0票数 0

如果我试图从底部的工作表对话框片段导航到另一个片段,我的应用程序就会崩溃。

我现在在底部工作表对话框片段中执行此操作:

代码语言:javascript
复制
someButton.setOnClickListener { view ->  
   val action = DestinationFragmentDirections.actionCurrentFragmentToDestinationFragment()
   view?.findNavController()?.navigate(action)
}

崩溃日志:

代码语言:javascript
复制
java.lang.IllegalStateException: View androidx.appcompat.widget.AppCompatButton{c44315f VFED..C.. ...P.... 44,1189-1036,1321 #7f0a00ff app:id/fragment_book_details_btn_edit} does not have a NavController set
        at androidx.navigation.Navigation.findNavController(Navigation.java:84)
        at androidx.navigation.ViewKt.findNavController(View.kt:28)
        at com.bose.bosushree.view.book_details.BookDetailsFragment.setClickListeners$lambda-4$lambda-3(BookDetailsFragment.kt:75)
        at com.bose.bosushree.view.book_details.BookDetailsFragment.lambda$OwDld1VFgq8jsjr6EbpPx5MD4aU(Unknown Source:0)
        at com.bose.bosushree.view.book_details.-$$Lambda$BookDetailsFragment$OwDld1VFgq8jsjr6EbpPx5MD4aU.onClick(Unknown Source:2)
        at android.view.View.performClick(View.java:6256)
        at android.view.View$PerformClick.run(View.java:24701)
        at android.os.Handler.handleCallback(Handler.java:789)
        at android.os.Handler.dispatchMessage(Handler.java:98)
        at android.os.Looper.loop(Looper.java:164)
        at android.app.ActivityThread.main(ActivityThread.java:6541)
        at java.lang.reflect.Method.invoke(Native Method)
        at com.android.internal.os.Zygote$MethodAndArgsCaller.run(Zygote.java:240)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:767)
EN

回答 2

Stack Overflow用户

发布于 2021-09-13 15:48:59

因此,对话框片段在不同的窗口中工作,并且不属于我们定义的navController的相同视图层次结构。

在这种情况下,我们需要从navHostFragment中找到我们的navController,然后执行导航:

代码语言:javascript
复制
someButton.setOnClickListener { view ->
                val action =
                    DestinationFragmentDirections.actionCurrentFragmentToDestinationFragment()
                val navHostFragment =
                    requireActivity().supportFragmentManager
                        .findFragmentById(R.id.nav_host_fragment_container) as NavHostFragment
                navHostFragment.navController.navigate(action)
            }
票数 0
EN

Stack Overflow用户

发布于 2021-09-13 16:23:58

根据Navigate to a Destination guide,您可以使用findNavController() extension on Fragment来获取NavController。这在任何类型的片段中都有效,包括BottomSheetDialogFragment

代码语言:javascript
复制
someButton.setOnClickListener { view ->  
   val action = DestinationFragmentDirections.actionCurrentFragmentToDestinationFragment()
   findNavController().navigate(action)
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/69165565

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档