实例化一个新的Android Fragment的最佳实践

发布时间 2023-11-03 20:34:36作者: 小满独家

内容来自 DOC https://q.houxu6.top/?s=实例化一个新的Android Fragment的最佳实践

我看到了在应用程序中实例化一个新的Fragment的两种常见做法:

Fragment newFragment = new MyFragment();

Fragment newFragment = MyFragment.newInstance();

第二种选项利用了静态方法 newInstance(),并且通常包含以下方法。

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

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

我是不是漏掉了什么?

哪种方法更好?还是只是一种好的做法?


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

这样说来,将东西传递给您的Fragment以便在Android重新创建Fragment后仍然可用的方法是将bundle传递给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);

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

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

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