如果调用了推迟输入转换,则永远不会观察到流的“asLiveData()”

Posted

技术标签:

【中文标题】如果调用了推迟输入转换,则永远不会观察到流的“asLiveData()”【英文标题】:Flow's "asLiveData()" will never be observed if postponeEnterTransition is called 【发布时间】:2021-02-25 18:12:33 【问题描述】:

我想等到我的数据准备好再显示我的视图,以便我的 SharedElementTransitions 可以正确执行。

不幸的是,使用此代码,如果 data 是从 Flow::asLiveData() 获得的 LiveData,则永远不会调用 startPostponedEnterTransition

    override fun onViewCreated(view: View, savedInstanceState: Bundle?) 
        postponeEnterTransition()

        viewModel.data.observe(viewLifecycleOwner) 
            adapter.setData(it)
            (view.parent as? ViewGroup)?.doOnPreDraw 
                startPostponedEnterTransition()
            
        
    

我应该怎么做才能等到我的数据加载完毕后再调用startPostponedEnterTransition()。我已经尝试了很多东西,但没有任何效果。

【问题讨论】:

这听起来像this issue,它在 Fragment 1.3.0-alpha08 或更高版本中的new state manager 中得到了修复。您使用的是哪个版本的 Fragments? 您是否尝试在onCreateView 中定义您的观察者? @ianhanniballake 哦,天哪,谢谢你让我知道。我使用的是 1.2.5。我会更新到最新的 alpha 看看它是否有效!!! 【参考方案1】:

正如ianhanniballake 指出的那样,更新到 androidx Fragments 1.3-alpha08+ 可以解决此问题。

【讨论】:

以上是关于如果调用了推迟输入转换,则永远不会观察到流的“asLiveData()”的主要内容,如果未能解决你的问题,请参考以下文章

readLine读取socket流的时候产生了阻塞

flink笔记14 动态表(Dynamic Tables)

flink笔记14 动态表(Dynamic Tables)

flink笔记14 动态表(Dynamic Tables)

Swift:如果孩子的观察者被移除,则不会调用 Firebase 身份验证观察者

c# as/is操作符