2017-01-01 3 views
-2

Я слежу за официальными android developer docu и this one за использование DialogFragment внутри моего проекта. пока что так хорошо, так как я должен передать данные в DialogFragment, чтобы создать список многозадачных, я вызываю DialogFragment изнутри моей MainActivity с помощью метода newInstance (передавая элементы), и я получаю правильный результат. Теперь я хотел бы передать еще один аргумент, а также данные для DialogFragment, но он должен быть необязательным, поскольку мне не нужно передавать его все время. Есть ли способ достичь этого?Android DialogFragment newInstance необязательные параметры

EDIT:
поэтому я взял советы от комментариев ниже и создал сеттер и передал элементы я хотел перейти к 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(); 
} 
+1

сеттеры возможно –

+1

Как насчет того, чтобы просто пропустить null? Когда он недоступен –

+0

@JawadLeWywadi, что возможно? как бы я использовал эту функцию setter 'DialogFragment newFragment = MyDialogFragment.newInstance (items);', а затем 'newFragment.setMySetter (value);'? как это ?? – b101

ответ

3

необязательный параметр можно сделать так:

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; 
} 

Вы можете позвонить 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 
    } 

... 

В качестве альтернативы вместо использования -1 вы не можете добавить Int на всех и просто проверить значение по умолчанию (я думаю, что его 0 в API Docs)

-2

Я получил его, он уже ответил - смешно, я не нашел его, когда я гугл ..

Есть самые простые способы сделать то, что вы хотите, но давайте возьмем такой подход: Как вы заметили, метод setMultiChoiceItems() получает String [] как элементы вашего DialogFragment и boolean [], чтобы определить, отмечены ли они или не. Мы будем использовать этот массив, чтобы упорствовать в выборе. Этот массив должен иметь ту же длину, что и массив items, и изначально будет установлено значение false.

Так все, что я должен был сделать создать boolean[] itemsChecked и установить правильные индексы истинно, перепроверить правильные флажков ..

Оригинал Вопрос Persist AlertDialog checked options - все кредит @ joao2fast4u стандарт

Смежные вопросы