我已经看到了两个在应用程序中实例化新Fragment的一般实践:
Fragment newFragment = new MyFragment();
Run Code Online (Sandbox Code Playgroud)
和
Fragment newFragment = MyFragment.newInstance();
Run Code Online (Sandbox Code Playgroud)
第二个选项使用静态方法newInstance(),通常包含以下方法.
public static Fragment newInstance()
{
MyFragment myFragment = new MyFragment();
return myFragment;
}
Run Code Online (Sandbox Code Playgroud)
起初,我认为主要的好处是我可以重载newInstance()方法以在创建Fragment的新实例时提供灵活性 - 但我也可以通过为Fragment创建重载构造函数来实现这一点.
我错过了什么?
一种方法比另一种方法有什么好处?还是只是好习惯?
我知道当你第一次实例化一个片段时,你可以使用传递参数setArguments(Bundle)并在片段中检索它们getArguments().
但是,在我的应用程序中,我有片段,在将它们添加到活动后将被分离并附加多次.在重新附加时,我可能需要传递一个片段参数来修改其内容,然后再重新附加它.我可以setArguments在第一次显示片段时使用,但在后续的情况下无法使用.该savedInstanceState不会在这种情况下工作,我不知道之前卸下片段参数的值.
我知道我可以在附加设置参数的片段之前实现一个我会调用的方法,但看起来这可能已经存在于API中而我只是没有看到它.
是否有内置的东西可以让我这样做,或者我必须自己实现这个?为了记录,我正在使用支持包(v4).
非常感谢!