实例化新的Android Fragment的最佳做法
我已经看到了两种在应用程序中实例化新片段的一般做法:
Fragment newFragment = new MyFragment();
和
Fragment newFragment = MyFragment.newInstance();
第二个选项使用静态方法newInstance()
并且通常包含以下方法。
public static Fragment newInstance()
{
MyFragment myFragment = new MyFragment();
return myFragment;
}
起初,我认为主要的好处是我可以重载newInstance()方法来创建Fragment的新实例时提供灵活性 - 但我也可以通过为Fragment创建一个重载构造函数来实现此目的。
我错过了什么?
一种方法比另一种方法有什么好处? 或者这只是一个好习惯?
如果Android决定稍后重新创建Fragment,它将调用片段的无参数构造函数。 所以重载构造函数不是一个解决方案。
据说,将东西传递给你的Fragment的方式,以便在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;
}
稍后在Fragment onCreate()
您可以使用以下命令访问该整数:
getArguments().getInt("someInt", 0);
即使片段由Android重新创建,该Bundle也可用。
另请注意: setArguments
只能在Fragment附加到Activity之前调用。
这种方法也记录在Android开发人员参考中:https://developer.android.com/reference/android/app/Fragment.html
使用我看到的newInstance()
的唯一好处如下:
您将拥有一个地方,可以将片段使用的所有参数捆绑在一起,而且每次实例化片段时都不必在下方编写代码。
Bundle args = new Bundle();
args.putInt("someInt", someInt);
args.putString("someString", someString);
// Put any other arguments
myFragment.setArguments(args);
它是一种很好的方法来告诉其他类它期望忠实工作的参数(尽管如果在片段实例中没有绑定任何参数,您应该能够处理这些情况)。
所以,我的看法是使用静态newInstance()
来实例化一个片段是一个好习惯。
还有另一种方法:
Fragment.instantiate(context, MyFragment.class.getName(), myBundle)
链接地址: http://www.djcxy.com/p/58697.html