【问题标题】:android - How to show BottomSheetDialog from a fragment?android - 如何从片段中显示BottomSheetDialog?
【发布时间】:2020-09-17 20:05:24
【问题描述】:

我正在开发一个包含小部件工具栏和 Recyclerview 的片段的应用程序。该片段是一个 CoordinatorLayout。

我需要在单击导航按钮时调用我的 BottomSheetDrawer。由于我的工具栏在一个片段内,我需要在那里显示 BottomSheetDrawer 槽。

我尝试以与 Activity 相同的方式实现该功能,但它不起作用,因为 supportFragmentManager 被标记为未解析的引用。

从片段中显示 BottomSheetFragment 的正确方法是什么?

Fragment.kt

class FragmentTrack : Fragment() {
    
    ...

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)

        topToolbar.setNavigationOnClickListener {
            val dialog = FragmentBottomSheetDrawer()
            dialog.show(supportFragmentManager, dialog.tag)

        }
    }

    ...
}

【问题讨论】:

    标签: android kotlin android-fragments


    【解决方案1】:

    片段中的supportFragmentManager 等价于childFragmentManager。这是用于任何类型的 DialogFragment 的正确 FragmentManager。

    【讨论】:

    • 使用childFragmentManager会导致应用程序崩溃,而Logcat没有任何日志...
    • 崩溃总是会有堆栈跟踪
    • 必须连接物理设备才能获取 logcat,我的错。出了什么问题:java.lang.NullPointerException: Attempt to invoke virtual method 'void androidx.appcompat.widget.Toolbar.setNavigationOnClickListener(android.view.View$OnClickListener)' on a null object reference
    • 好吧,直到onViewCreated() 才会创建Fragment 的视图,所以如果topToolbar 是Fragment 布局的一部分,那么onCreate() 为时过早。 (我还要注意,你不应该将retainInstance 用于任何带有 UI 的 Fragment)。
    • 我当时的 ID 可能有问题。我也更新了放置协调器片段 xml 的问题。该应用程序仍然崩溃并出现相同的 logcat 错误,但同样,它可能是 ID 的命名错误
    猜你喜欢
    • 1970-01-01
    • 2016-11-06
    • 1970-01-01
    • 1970-01-01
    • 2015-01-29
    • 1970-01-01
    • 2021-12-20
    • 1970-01-01
    • 2022-01-10
    相关资源
    最近更新 更多