Android Fragments 返回目的地时如何更新目的地的参数?

pexxcrt2  于 11个月前  发布在  Android
关注(0)|答案(1)|浏览(124)

我目前正在尝试实现某种帐户配置文件,当前用户可以做一些修改,以他们的个人资料。我已经添加了在服务器端同步配置文件,但我目前被困在如何更新帐户的本地副本。帐户配置文件Fragment的调用Fragment已经接收到帐户参数,所以我想如果我能找到一种方法传递回来更新后的帐户,那么我将是金色的。考虑到这一点,我想也许我需要听回按,并使用navigate()回到调用Fragment,并传递更新后的帐户给它。但NavController似乎不支持它,至少我找不到任何函数,看起来像它可以让你听/覆盖文档上的反按。我发现你可以使用这个:

requireActivity().onBackPressedDispatcher.addCallback(viewLifecycleOwner){
    
}

字符串
但它似乎对我不起作用。现在我得到了一个错误,由于某种原因,当下面的代码已经工作之前。

val action = DashboardFragmentDirections.showAccountDetailsFromDashboard(currentAccount)
findNavController().navigate(action)


错误看起来像这样:
androidx.fragment.app.Fragment$InstantiationException:无法示例化片段com.app.name.fragments.management.AccountProfileFragment:找不到片段构造函数
我已经做了一对夫妇的无效缓存和错误仍然发生。
我目前想做的是修复这个奇怪的错误,并找到一种方法来更新调用Fragment的接收帐户。

txu3uszq

txu3uszq1#

不太确定这是不是正确的做事方式,但这就是我实现我想做的事情的方式。
我的解决方案在很大程度上基于这个answer
这需要在MainActivity

val navController = findNavController(R.id.nav_host_fragment_content_main)
setupActionBarWithNavController(navController, appBarConfiguration)
binding.navView.setupWithNavController(navController)

字符串
然后在Fragment上,你想要听回按,你在至少onViewCreated内添加这个:

/**
 * this is the listener for the toolbar back press
 */
val callback: OnBackPressedCallback =
    object : OnBackPressedCallback(true /* enabled by default */) {
        override fun handleOnBackPressed() {
            val action = AccountProfileFragmentDirections.goBackToDashboardFromAccountProfile(updatedAccount)
            findNavController().navigate(action)
        }
    }

ctx.onBackPressedDispatcher.addCallback(viewLifecycleOwner, callback)

/**
 * this is the listener for the actual back press
 */
val callback2 = requireActivity().onBackPressedDispatcher.addCallback(viewLifecycleOwner) {
    val action = AccountProfileFragmentDirections.goBackToDashboardFromAccountProfile(updatedAccount)
    findNavController().navigate(action)
}

相关问题