Изменить существующий DialogFragment - PullRequest
0 голосов
/ 26 октября 2018

Хотелось бы узнать, есть ли способ получить DialogFragment, как getFragmentByTag?

Я объясню. Я использую фрагмент диалога, чтобы получить некоторую информацию от пользователя, затем я устанавливаю информацию как данные дочернего элемента расширяемого ListView.

Затем я создал кнопку, которая позволяет пользователю редактировать дочерние данные. Я хочу снова открыть тот же DialogFragment и установить старые данные в полях EditText. это мой код:

NewExerciseChildFragment editExercise = new NewExerciseChildFragment();
Bundle bundle = new Bundle();
bundle.putInt("groupPosition", groupPosition);
bundle.putString("exerciseName", exerciseName);
bundle.putDouble("weight", weight);
bundle.putInt("reps", reps);
bundle.putInt("sets", sets);

editExercise.setArguments(bundle);
editExercise.show(getFragmentManager(), "showEditedExercise"); 

Проблема в том, что я создаю новый DialogFragment, что означает, что я не буду редактировать данные, а добавлю другого дочернего элемента.

Есть идеи?

1 Ответ

0 голосов
/ 26 октября 2018

Согласно документации у вас есть два варианта отображения DialogFragment, либо в виде Диалога («всплывающее окно»), либо Встраивания

Выбор между диалогом или внедрением

DialogFragment по-прежнему можно использовать как обычный фрагмент, если желательно. Это полезно, если у вас есть фрагмент, который в некоторых случаях должен отображаться в виде диалога, а другие встроены в больший пользовательский интерфейс. это поведение обычно будет автоматически выбираться для вас на основе того, как вы используете фрагмент, но можете настроить его setShowsDialog (булево).

ref: https://developer.android.com/reference/android/app/DialogFragment

Диалоги предназначены для использования в качестве "всплывающих окон" *, которые обычно уничтожаются после увольнения. Эта опция потребует передачи ссылки на данные / модель / объект, находящиеся в ExapandableListView (или некотором дочернем элементе, как вы упомянули). Этот объект должен был бы выставить все необходимые установщики / получатели, чтобы его значения / состояние управлялись DialogFragment.

Если вы идете по этому пути, то почему бы не получить исходные данные (метрик упражнений) таким же образом - путем передачи ссылки на пустой объект - если только нет другой причины иметь особый случай для первоначального получения данных не упомянуто? Таким образом, ваш механизм получения и редактирования данных будет идентичен.

Хорошая статья для передачи ссылок на объекты через пакет / посылку здесь https://medium.com/@hamidgh/sending-objects-to-fragment-naive-question-is-it-sent-by-value-ddaaa19fa42d.

Внедрение позволит пользователю редактировать данные на месте, устраняя необходимость во всплывающем окне, но для этого может потребоваться больше места, чем доступно, поскольку данные / поля должны быть достаточно большими редактировать с разумной легкостью.

Однако, используя то, что у вас уже есть, есть ли причина, по которой вы не можете просто вернуть отредактированные данные, так же, как это делается при первоначальном вводе, вы, кажется, правильно используете Bundle для отправки значений обратно диалоговое окно для редактирования, поэтому я не вижу проблем там?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...