代码之家  ›  专栏  ›  技术社区  ›  AndroidDev

目的地似乎不对

  •  0
  • AndroidDev  · 技术社区  · 4 年前

    我不知道该如何管理这个问题 currentDestination 来自Android navController,尤其是在使用 <dialog> .以下是我的设想:

    在我的第一个片段中,我导航到一个 DialogFragment 这是一个按钮。单击该按钮时,我会更新第一个片段正在观察和调用的一些实时数据 dismiss() .但当控件返回到第一个片段时 当前目的地 在navController中仍然设置为对话框片段!

    为什么不设置为第一个片段?我还尝试使用导航从对话框移动到第一个片段,但得到了完全相同的结果。

    以下是代码:

    class AgendaFragment : Fragment() {
        private val mainViewModel: MainViewModel by activityViewModels()
        private lateinit var binding: FragmentAgendaBinding
    
        override fun onCreateView(
            inflater: LayoutInflater, 
            container: ViewGroup?,
            savedInstanceState: Bundle?
        ): View {
    
            binding = FragmentAgendaBinding.inflate(inflater, container, false)
            binding.someButton.setOnClickListener {
                findNavController.navigate(AgendaFragmentDirections.toDialog())
            }
        }
    
        override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
            mainViewModel.someLiveData.observe(viewLifecycleOwner) {
                Timber.d(findNavController().currentDestination)
            }
        }
    }
    
    class MyDialog : DialogFragment() {
        private val mainViewModel: MainViewModel by activityViewModels()
    
        override fun onCreateView(
            inflater: LayoutInflater,
            container: ViewGroup?,
            savedInstanceState: Bundle?
        ): View {
            super.onCreateView(inflater, container, savedInstanceState)
    
            binding = DialogMyBinding.inflate(inflater, container, false)
    
            binding.button.setOnClickListener{
                dismiss()
                mainViewModel.someLiveData.postValue(true)
            }
    }
    

    导航图。xml

    <fragment
        android:id"@+id/agendaFragment
        android:name="com.example.AgendaFragment">
        <action
            android:id="@+id/toDialog"
            app:destination="@id/MyDialog"
            app:popUpTo="@id/agendaFragment"
            app:popUpToInclusive="true"/>
    </fragment>
    

    一切按正确的顺序进行。日志输出如下所示:

    目的地(com.example:id/MyDialog)

    但这是从AgendaFragment触发的,那么为什么当前目标仍然设置为对话框而不是AgendaFragment?

    0 回复  |  直到 4 年前