我理解这段代码中的所有内容,除非使用newIstance()。有人可以解释一下。非常感谢。
public class DateDialogFragment extends DialogFragment {
public static String TAG = "DateDialogFragment";
static Context sContext;
static Calendar sDate;
static DateDialogFragmentListener sListener;
public static DateDialogFragment newInstance(Context context, int titleResource, Calendar date){
DateDialogFragment dialog = new DateDialogFragment();
sContext = context;
sDate = date;
Bundle args = new Bundle();
args.putInt("title", titleResource);
dialog.setArguments(args);
return dialog;
}
}
我做了一个编辑,我猜它在静态时的工作方式不同。我想这就是为什么我感到困惑。如何在静态时改变方法?我真的不明白为什么不在构造函数中做到这一点?
答案 0 :(得分:2)
使用片段(任何扩展Fragment
的类)时,您经常需要传递一些数据。这是通过使用接收setArguments
的{{1}}方法实现的。由于这样做需要大量代码(创建捆绑包,考虑密钥名称等),因此将数据传递给静态方法(通常称为Bundle
)是很常见的。该方法的想法是创建参数bundle并将其传递给newInstance
;然后它返回片段,你可以把它放在任何你想要的地方。
以这种方式使用片段的另一个好处是,当您直接在XML布局中插入片段时,必须有一个空构造函数(或者根本没有)。如果您使用构造函数创建一个片段(以传递其必要的数据),您可能会遇到有关缺少的空构造函数的错误。