Android 片段新实例

Android 片段新实例,android,android-fragments,Android,Android Fragments,嗨,我正在学习碎片,我有一些疑问 V1: 因此,创建新片段的正确方法应该是使用“newInstance”而不是构造函数,如下所示: Fragment fragment = MyFragment.newInstance(variable); 类“MyFragment”上的代码应该是: private static final String ARG_PARAM1 = "param1"; private int variable; public MyFragment()

嗨,我正在学习碎片,我有一些疑问

V1: 因此,创建新片段的正确方法应该是使用“newInstance”而不是构造函数,如下所示:

    Fragment fragment = MyFragment.newInstance(variable);
类“MyFragment”上的代码应该是:

private static final String ARG_PARAM1 = "param1";
private int variable;
public MyFragment() {
    //Empty constructor
}
新实例将接收param,并将它们放在一个Bundle中,并为类设置参数

 public static mi_fragment newInstance(Int param1) {
    MyFragment fragment = new MyFragment();
    Bundle args = new Bundle();
    args.putInt(ARG_PARAM1, param1);
    fragment.setArguments(args);
    return fragment;
}
设置后,onCreate方法将拾取参数:

public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    if (getArguments() != null) {
        variable = getArguments().getInt(ARG_PARAM1);
    }
V2: 但我仍然看不到使用构造函数和以编程方式设置参数的问题:

 Bundle bundle = new Bundle();
 bundle.putInt("key", variable);
 
 Fragment fragment = new MyFragment();
 fragment.setArguments(bundle);
然后,我选择方法onCreate上的参数:

public void onCreate(@Nullable Bundle savedInstanceState)
{
    super.onCreate(savedInstanceState);
    Bundle bundle = this.getArguments();
    if(bundle!=null){
        variable = getArguments().getInt("key");
    }
}
所以我决定在互联网上搜索这个,我找到了一个,但我仍然无法理解它,或者你什么时候可以使用它

将内容传递给片段的方法是将bundle传递给setArguments方法,这样在Android重新创建片段后它们就可以使用了

即使Android以某种方式重新创建了该片段,该捆绑包也将可用

因此,我的结论是,让bundle保持活动状态,使用newInstance可以使您返回到最后一个片段。但可能我错了,所以我需要帮助


问题:两者之间的主要区别是什么?您如何从newInstance中获益?举个例子。

没有区别。但是newInstance是干净的,当没有真正的区别时,每个人都会抓狂@Hoomaneveryone反对使用片段构造函数来传递数据,而不是使用newInstance或local方法。我认为,类应该是自给自足的。为此,当您在fragment中创建newIntance方法时,该方法本身将负责创建片段并向其传递参数。相反,如果执行后面的操作,则创建一个片段并传递参数。所以,我同意@Hooman。第一种方法是更干净