小编典典

实例化新 Android 片段的最佳实践

all

我已经看到了两种在应用程序中实例化新 Fragment 的一般做法:

Fragment newFragment = new MyFragment();

Fragment newFragment = MyFragment.newInstance();

第二个选项使用静态方法newInstance()通常 包含以下方法。

public static Fragment newInstance() 
{
    MyFragment myFragment = new MyFragment();
    return myFragment;
}

起初,我认为主要的好处是我可以重载 newInstance() 方法以在创建 Fragment 的新实例时提供灵活性 - 但我也可以通过为 Fragment
创建重载构造函数来做到这一点。

我错过了什么?

一种方法比另一种方法有什么好处?或者这只是一个好习惯?


阅读 116

收藏
2022-03-02

共1个答案

小编典典

如果 Android 决定稍后重新创建您的 Fragment,它将调用您的 Fragment 的无参数构造函数。所以重载构造函数不是一个解决方案。

话虽如此,将东西传递给您的 Fragment 以便在 Android 重新创建 Fragment
后它们可用的方法是将包传递给该setArguments方法。

因此,例如,如果我们想将整数传递给片段,我们将使用类似的东西:

public static MyFragment newInstance(int someInt) {
    MyFragment myFragment = new MyFragment();

    Bundle args = new Bundle();
    args.putInt("someInt", someInt);
    myFragment.setArguments(args);

    return myFragment;
}

稍后在 Fragment 中,onCreate()您可以使用以下方法访问该整数:

getArguments().getInt("someInt", 0);

即使 Android 以某种方式重新创建了 Fragment,此 Bundle 也将可用。

另请注意:setArguments只能在 Fragment 附加到 Activity 之前调用。

这种方法也记录在 android 开发者参考中:https
://developer.android.com/reference/android/app/Fragment.html

2022-03-02