Android中的片段事务问题

贾敏·莫迪

我的应用程序中有一个片段 A。

从片段 A,我正在移动到片段 B。

请注意,我在 Fragment A 上添加了 Fragment B(不替换 Fragment。)

现在,当我从片段 B 回到片段 A 时,我必须调用片段 A 的方法,这就是为什么我在片段 A 的生命周期方法中调用该方法:在onResume()onViewCreated()

但是我注意到通过将 log 放在这些方法没有调用的方法中意味着我没有在 logcat 中获取 Log 并且我在这两个方法中调用的方法没有执行。

可能是什么问题?谢谢。

我正在做如下供您参考:

override fun onResume() {
    super.onResume()
    Log.e("onResume 1","onResume 1")
    (activity as HomeActivity).updateToolbar(false)
    setLanguageSpecificData()
}

override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
    super.onViewCreated(view, savedInstanceState)
    Log.e("onViewCreated","onViewCreated")
    setLanguageSpecificData()
}
马约尔·加吉拉

问题:

您在问题中提到的方式:

我在片段 A 上添加片段 B(不替换片段。)

因此,基于replace&调用的生命周期方法之间存在差异add

如果你看看这个答案:https : //stackoverflow.com/a/21684520/9715339

就fragment的生命周期事件而言onPauseonResume,onCreateView等生命周期事件会在 情况下被调用,replace在情况下不会被调用add

此外,它也与活动生命周期相关。

解决方案:

查看您的代码,您希望在当前可见片段更改或换句话说backstack更改时更新某些内容

为此,您可以在您的活动中执行此操作:

supportFragmentManager.addOnBackStackChangedListener {
            //when backstack changes get the current fragment & do something with that info
            val frg = supportFragmentManager.findFragmentById(R.id.root_container)
            if (frg is AFragment){
                // do something like updateToolbar(false)
            } else if (frg is BFragment){
                //something else
            }
            Log.d("FrgTest-",frg.toString())
        }

片段中你可以做requireActivity().supportFragmentManager&休息会没事的。

读:

这只是 backstack 变化的一个例子。如果您想在片段之间进行通信,您也可以使用其他方式setFragmentResultListener

这可能会有所帮助:https : //developer.android.com/guide/fragments/communicate#kotlin

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章