在静态使用newInstance()方法的代码片段中究竟发生了什么?

时间:2012-06-02 01:51:11

标签: android

我理解这段代码中的所有内容,除非使用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;
   }
}

我做了一个编辑,我猜它在静态时的工作方式不同。我想这就是为什么我感到困惑。如何在静态时改变方法?我真的不明白为什么不在构造函数中做到这一点?

1 个答案:

答案 0 :(得分:2)

使用片段(任何扩展Fragment的类)时,您经常需要传递一些数据。这是通过使用接收setArguments的{​​{1}}方法实现的。由于这样做需要大量代码(创建捆绑包,考虑密钥名称等),因此将数据传递给静态方法(通常称为Bundle)是很常见的。该方法的想法是创建参数bundle并将其传递给newInstance;然后它返回片段,你可以把它放在任何你想要的地方。

以这种方式使用片段的另一个好处是,当您直接在XML布局中插入片段时,必须有一个空构造函数(或者根本没有)。如果您使用构造函数创建一个片段(以传递其必要的数据),您可能会遇到有关缺少的空构造函数的错误。