我见过在应用程序中实例化新片段的两种一般做法:
Fragment newFragment = new MyFragment();
and
Fragment newFragment = MyFragment.newInstance();
第二个选项使用静态方法newInstance()
and 一般来说包含以下方法。
public static Fragment newInstance()
{
MyFragment myFragment = new MyFragment();
return myFragment;
}
起初,我认为主要的好处是我可以重载 newInstance() 方法,以便在创建 Fragment 的新实例时提供灵活性 - 但我也可以通过为 Fragment 创建重载的构造函数来实现这一点。
我错过了什么?
一种方法相对于另一种方法有什么好处?或者这只是一个好的做法?
如果 Android 决定稍后重新创建 Fragment,它将调用 Fragment 的无参数构造函数。所以重载构造函数并不是一个解决方案。
话虽这么说,将内容传递给 Fragment 以便它们在 Android 重新创建 Fragment 后可用的方法是将一个包传递给setArguments
method.
因此,例如,如果我们想将整数传递给片段,我们将使用类似以下的内容:
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 以某种方式重新创建了该 Fragment,该 Bundle 也将可用。
另请注意:setArguments
只能在 Fragment 附加到 Activity 之前调用。
这种方法也记录在 android 开发人员参考中:https://developer.android.com/reference/android/app/Fragment.html https://developer.android.com/reference/android/app/Fragment.html
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)