Я следил за официальным документом для разработчиков Android и < href="https://developer.android.com/reference/android/app/DialogFragment.html" rel="nofollow noreferrer">этот для использования DialogFragment внутри моего проекта. пока все хорошо, так как мне нужно передать данные в DialogFragment, чтобы он создал список с множественным выбором, я вызываю DialogFragment из моей MainActivity с помощью метода newInstance
(передавая элементы) и получаю правильный результат. Теперь я хотел бы передать еще один аргумент, а также данные для DialogFragment, но он должен быть необязательным, поскольку мне не нужно передавать его все время. Есть ли способ для меня достичь этого?
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();
}
DialogFragment newFragment = MyDialogFragment.newInstance(items);
, а затемnewFragment.setMySetter(value);
? как это ?? - person b101   schedule 01.01.2017newInstance
методов, CTL+F дляnewInstance
находит0
- person Blundell   schedule 01.01.2017newInstance
или необязательных параметров, о которых вы говорите. Это довольно легко сделать, но я изо всех сил пытаюсь понять, где вы пытаетесь это сделать. - person Blundell   schedule 01.01.2017