为什么 Fragment 现在有非空构造函数?

Why Fragment have non-empty constructor now?

很长一段时间以来,我们都被告知不要通过 Fragment 构造函数传递变量。 但似乎 Fragment 本身现在有其他 Fragment 构造函数来传递如下数据。不从 Fragment 构造函数传递数据仍然是我们的最佳实践吗?或者有什么技巧可以摆脱它但仅限于框架级别?

public Fragment() {
    initLifecycle();
}

@ContentView
public Fragment(@LayoutRes int contentLayoutId) {
    this();
    mContentLayoutId = contentLayoutId;
}

根据 Android 文档找到答案。

You must set a custom FragmentFactory if you want to use a non-default constructor to ensure that your constructor is called when the fragment is re-instantiated. https://developer.android.com/reference/androidx/fragment/app/Fragment#Fragment(int)

所以我们有了这个新的构造函数就可以使用了,但是我们还是要提供FragmentFactory来处理fragment被重新创建的情况。