如何使用导航组件导航嵌套的DialogFragments,而又不破坏第二个DialogFragment?

问题描述

情况:

  1. 片段A导航到DialogFragment B(单击按钮)
  2. 在给定条件下,在B的PositiveButton中->导航至DialogFragment C

问题:

单击DialogFragment B的确认按钮时,B会收到此DialogFragment的onDestroy调用。 无论如何,这都是有意的,当B不需要导航到C时也没问题。

但是:当B根据要求导航到C时,会发生以下情况:

  • C突然弹出一秒钟,然后消失
  • 并且导航控制器的当前位置是不是A。我需要一次按下以再次到达A

我也不希望导航控制器位于A,而是希望它位于C并显示DialogFragment。

实施:

片段实现

class FragmentA : Fragment() {
...
    // is assigned as onClick listener to the button
    fun onClickButton() {
        if (findNavController().currentDestination?.id == R.id.FragmentANavId) {
            val action = FragmentADirections.actionFragmentAToDialogFragmentB()
            findNavController().navigate(action)
    }
}

// in separate file
class DialogFragmentB : DialogFragment() {
...
    override fun onCreateDialog(savedInstanceState: Bundle?): Dialog {
        val builder = MaterialAlertDialogBuilder(requireContext())
            ...
            .setPositiveButton("Save",{ _,_ ->
                if (...) {
                    val action = DialogFragmentBDirections.actionDialogFragmentBToDialogFragmentC
                    findNavController().navigate(action)
                }
         return builder.create()
     }
}

class DialogFragmentC : DialogFragment() {
    override fun onCreateDialog(savedInstanceState: Bundle?): Dialog {
        val builder = MaterialAlertDialogBuilder(requireContext()) // also tried with requireActivity() as context
            ...
            .setPositiveButton("Confirm",_ ->
                // code to handle the user confirmation
                }
         return builder.create()
     }
}

nav_graph.xml

    <fragment
        android:label="@string/some_text"
        android:name="...FragmentA"
        android:id="@+id/fragmentA" >
        <action
            android:id="@+id/action_fragmentA_to_fragmentDialogB"
            app:destination="@id/fragmentDialogB" />
    </fragment>

    // I put them into a nested graph
    <navigation android:id="@+id/dialogFragmentsnested"
        app:startDestination="@id/fragmentDialogB">
        <dialog
            android:id="@+id/fragmentDialogB"
            android:name="...FragmentDialogB">
            <action
                android:id="@+id/action_fragmentDialogB_to_fragmentDialogC"
                app:destination="@id/fragmentDialogC" />
        </dialog>
        <dialog
            android:id="@+id/fragmentDialogC"
            android:name="fragmentDialogC">
        </dialog>
    </navigation>

尝试解决的问题:

摘要

当我从DialogFragmentB导航到DialogFragmentC时,两个DialogFragments都会收到一个onDestroy调用(如leak-canary所观察到的那样)。

在这里想念什么吗?你有什么建议吗?

如何在不立即关闭DialogFragmentC的情况下(并且无需用户交互)从DialogFragmentB移至DialogFragmentC?

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...