片段newInstance为什么要使用参数?

Hei*_*erg 7 android android-fragments

这两种方法之间的真正区别是什么?

1.我正在使用标准的老式捆绑包:

    public static final Fragment newInstance(int val1, int val2) {
    TestFragment f = new TestFragment();
    Bundle bundle = new Bundle();
    bundle.putInt("val1", val1);
    bundle.putInt("val2", val2);
    f.setArguments(bundle);
    return f;
}
Run Code Online (Sandbox Code Playgroud)

我正在设置为实例成员

    public static final Fragment newInstance(int val1, int val2) {
    TestFragment f = new TestFragment();
    f.val1 = val1;
    f.val2 = val2;
    return f;
}
Run Code Online (Sandbox Code Playgroud)

CSm*_*ith 6

在第一个示例中,您实际上没有设置片段实例变量val1和val2,因此它们保持未初始化状态.因此,您需要回读onCreate中的包以设置实例变量.

当片段实例被销毁并重新创建时(例如,由于设备旋转),onCreate(或DialogFragments的onCreateDialog)可以使用以下命令重新加载参数:

public void onCreate(Bundle savedInstanceState)
{
 if (savedInstanceState != null)
 {
  Bundle args = getArguments();
  val1 = args.getInt("val1");
  val2 = args.getInt("val2");
 }
}
Run Code Online (Sandbox Code Playgroud)

你的国家可以恢复.