Android DialogFragment newInstance 可选参数

b10*_*101 -2 java android dialogfragment

我一直在关注官方的android 开发人员文档这个文档,以便在我的项目中使用 DialogFragment。到目前为止一切顺利,因为我必须将数据传递给 DialogFragment 以创建多选列表,所以我通过newInstance方法(传递项目)从我的 MainActivity 内部调用 DialogFragment并且我得到了正确的结果。现在,我想传递另一个参数,也是 DialogFragment 的数据,但它必须是可选的,因为我不需要一直传递它。有没有办法让我实现这一目标?

编辑:
所以我从下面的评论中获取了建议并创建了一个二传手并将我希望传递给DiagramFragment的项目。它工作得很好,遗憾的是它没有帮助我解决我的问题。我想传递第二个数据的原因是我认为,如果用户打开 DialogFragment 并进行选择,然后重新打开 DialogFragment,他的最后选择就消失了。我想检查他已经以编程方式检查过的复选框,方法是将检查过的一次传递回 DialogFragment 然后将正确的索引设置回mSelectedItems- 但即使索引设置正确,复选框保持未选中状态..有解决方法吗?

static MyDialogFragment newInstance(int num) {
        MyDialogFragment f = new MyDialogFragment();

        // Supply num input as an argument.
        Bundle args = new Bundle();
        args.putInt("num", num);
        f.setArguments(args);

        return f;
}

...

@Override
public Dialog onCreateDialog(Bundle savedInstanceState) {
    mSelectedItems = new ArrayList();  // Where we track the selected items
    AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());
    // Set the dialog title
    builder.setTitle(R.string.pick_toppings)
    // Specify the list array, the items to be selected by default (null for none),
    // and the listener through which to receive callbacks when items are selected
           .setMultiChoiceItems(R.array.toppings, null,
                      new DialogInterface.OnMultiChoiceClickListener() {
               @Override
               public void onClick(DialogInterface dialog, int which,
                       boolean isChecked) {
                   if (isChecked) {
                       // If the user checked the item, add it to the selected items
                       mSelectedItems.add(which);
                   } else if (mSelectedItems.contains(which)) {
                       // Else, if the item is already in the array, remove it
                       mSelectedItems.remove(Integer.valueOf(which));
                   }
               }
           })
    // Set the action buttons
           .setPositiveButton(R.string.ok, new DialogInterface.OnClickListener() {
               @Override
               public void onClick(DialogInterface dialog, int id) {
                   // User clicked OK, so save the mSelectedItems results somewhere
                   // or return them to the component that opened the dialog
                   ...
               }
           })
           .setNegativeButton(R.string.cancel, new DialogInterface.OnClickListener() {
               @Override
               public void onClick(DialogInterface dialog, int id) {
                   ...
               }
           });

    return builder.create();
}
Run Code Online (Sandbox Code Playgroud)

Blu*_*ell 5

一个可选参数可以这样完成:

static MyDialogFragment newInstance() {
        return newInstance(-1);
}

static MyDialogFragment newInstance(int num) {
        MyDialogFragment f = new MyDialogFragment();

        // Supply num input as an argument.
        Bundle args = new Bundle();
        args.putInt("num", num);
        f.setArguments(args);

        return f;
}
Run Code Online (Sandbox Code Playgroud)

newInstance()如果您没有号码或有号码,您可以拨打newInstance(300)

另一方面:

@Override
public Dialog onCreateDialog(Bundle savedInstanceState) {
     int num = getArguments().getInt("num");
     if(num == -1) {
       // no extra number
     } else {
       // do something with the extra number
     }

...
Run Code Online (Sandbox Code Playgroud)

或者,-1您根本无法添加而不是使用Int,只需检查默认值(我认为它在 API 文档中为 0)