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

Fragment newFragment = new MyFragment();

Fragment newFragment = MyFragment.newInstance();

The second option makes use of a static method newInstance()generally contains the following method.

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

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

我错过什么了吗?

一种方法比另一种方法有什么好处?还是仅仅是良好的实践?

推荐答案

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

话虽如此,要将内容传递给片段,以便在Android重新创建片段后可用,方法是将包传递给setArguments方法.

例如,如果我们想把一个整数传递给片段,我们可以使用如下方法:

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

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

    return myFragment;
}

稍后在片段onCreate()中,您可以通过使用以下命令来访问该整数:

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

即使这个片段是由Android以某种方式重新创建的,这个Bundle 包也是可用的.

还要注意:setArguments只能在片段附加到活动之前调用.

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

Android相关问答推荐

如何使用单个代码库使用不同的firebase项目创建多个应用程序ID apk

如何在Jetpack Compose中使用Box Composable来实现这种布局?

Android-LVL库始终返回NOT_SUBLISTED

在更改MuableState的值后,Android API 26(Oreo)上的Composable不能重新组合

我无法在底部导航栏中正确导航-Android底部导航视图

如何在DownloadManager Android中显示ProgressBar和Complete Listener

设置文本 colored颜色 动画时如何减少重新组合?

Android v31 及更低版本中 ImageView 中的圆角

为什么我收到这个错误我需要安装 android studio

当 Firebase Firestore 发生变化时,Kotlin ViewModel 不会更新

如何仅同步 local_manifest.xml?

Jetpack compose (Glance) 小部件在加载位图图像后不会重新组合

Electric Eel 后 Gradle 项目同步失败 | 2022.1.1更新

Jetpack compose :使用 rememberSaveable 时未应用待处理的合成

如何像 XML 一样在 Compose Android Studio 中折叠/展开小部件代码区域/区域

是什么让 Android Studio 中的按钮变成紫色?加上新手的其他奇怪行为

更改 Android SDK 版本 33 后建议在 xml 布局文件中不起作用

为什么按钮没有拉伸到屏幕边缘?

禁用通知权限后启动前台服务导致崩溃(Android 13)

如何从构建的流对象中发出值