【问题标题】:Listen when a shared element is back on original Fragment当共享元素返回原始片段时收听
【发布时间】:2021-03-04 11:40:45
【问题描述】:

你好 Android 社​​区,

我有一个非常简单的应用程序,由两个片段 A 和 B 组成,这两个片段之间有一个共享元素。

当我打开 Fragment B 时,过渡效果很好,当元素完成过渡时我能够听到。但是,当我弹出 FragmentB 时,我希望 FragmentA 被告知返回过渡已结束。

我这里做了一个项目示例:https://github.com/JulienDev/shared_element_listener

如您所见,我尝试了许多不同的方法,但都没有成功。

你知道这是否可能吗?

非常感谢:)

【问题讨论】:

    标签: android android-fragments android-transitions shared-element-transition


    【解决方案1】:

    我认为问题已经解决了。首先改变 goToB() 方法如下:

    fun goToB(view: View) {
    supportFragmentManager.beginTransaction()
    .addSharedElement(view, "view_transition")
    .replace(findViewById<ViewGroup>(R.id.preorder_content).id, FragmentB())
    //.addToBackStack("")
    .disallowAddToBackStack()    // Prevent from adding this fragment to Back stack
    .commit()
    }
    

    现在,我们在 Fragment B 内部。如果现在单击返回按钮,那么我通过在 Fragment B 中添加回调来使用回调以编程方式处理它。喜欢:

    override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
    super.onViewCreated(view, savedInstanceState)
    
    val transitionView = requireView().findViewById<View>(R.id.view_transition)
    transitionView.setOnClickListener {
           (activity as MainActivity).goToC(transitionView)
       }
    // This callback will only be called when Fragment B is at least Started.
    requireActivity().onBackPressedDispatcher.addCallback(this) {
            (activity as MainActivity).goFromBToA(transitionView)
        }
    }
    

    我在 Activity 中放了另一个方法。

    fun goFromBToA(view: View){
        supportFragmentManager.beginTransaction()
            .addSharedElement(view, "view_transition")
            .replace(findViewById<ViewGroup>(R.id.preorder_content).id, FragmentA())
            .disallowAddToBackStack()
            .commit()
    }
    

    现在我可以看到从 B 弹出到 Fragment A 时的转换结束日志。

    【讨论】:

    • 您好,感谢您的贡献。不幸的是,您的解决方案要求 B 知道之前显示的片段是什么,这是我不想要的:(
    猜你喜欢
    • 1970-01-01
    • 2015-08-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-12-31
    • 1970-01-01
    相关资源
    最近更新 更多