kotlin 在Fragment中的onCreateView外部扩展视图

new9mtju  于 2023-06-24  发布在  Kotlin
关注(0)|答案(2)|浏览(146)

Android文档教我们在onCreateView中膨胀我们的xml布局,然后返回膨胀的视图。但其他地方的通货膨胀又如何呢?
我想在onCreateView之前膨胀我的视图,存储在一个文件中,然后返回它,已经膨胀了。我不能用通常的方法做这件事。为此,我必须创建一个Inflater,它似乎工作:

class MyFragment : Fragment() 
{
    private var _view: View? = null

    private fun inflateView() {
        _view = LayoutInflater.from(requireContext()).inflate(R.layout.my_layout, null, false)
    }

    ...

    override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? {
        return _view
    }
}

但是文档说我必须直接在onCreateView()中膨胀。为什么?这种方法有什么缺点吗?什么是正确的方式来满足我的要求?

qf9go6mv

qf9go6mv1#

你可以看看AsyncLayoutInflater
这将允许实际的视图膨胀发生在后台线程上,并在膨胀完成时提供OnInflateFinishedListener回调。
对于可以膨胀的内容有一些限制,所以一定要仔细阅读文档。

zpjtge22

zpjtge222#

onCreateView返回null意味着您正在创建一个“无头片段”(没有任何UI)。
这会影响其行为和生命周期(没有调用onViewCreatedonDestroyViewviewLifecycleOwner保持为空)。
如果您打算延迟创建视图层次结构,那么您至少必须返回一个准系统FrameLayout,稍后将填充它(或者只是创建一个“加载”布局并替换它)。

相关问题