Передайте ArrayList настраиваемых объектов из дочерней активности обратно родительской - PullRequest
0 голосов
/ 17 июня 2020

Я делаю базовое c приложение для отслеживания привычек. У меня есть класс фрагмента под названием HabitFragment (это фрагмент, потому что это всего лишь одна часть приложения с несколькими вкладками), который отображает список привычек (которые являются объектами настраиваемого класса привычек и содержат имя, частоту и т. Д. c) , на каждом из которых есть кнопка «журнал». Эта кнопка журнала переводит пользователя к другому действию под названием HabitLog, где он сообщает, в какую дату и время он выполнил указанную привычку. В этом упражнении у меня есть ArrayList настраиваемых объектов, в которых хранятся дата и время привычки, записанной пользователем, метко названной HabitDateAndTime. Я хочу иметь возможность отправить этот ArrayList обратно в класс HabitFragment одним нажатием кнопки. Я не могу заставить его работать.

Я пробовал это в методе onCreate моего действия HabitLog. Он основан на том, что я мог найти в старых сообщениях на этом сайте:

    doneButton.setOnClickListener(v -> {
        Gson gson = new Gson();
        Intent data = new Intent();
        data.putExtra("dateTimes", gson.toJson(datesAndTimes));
        setResult(RESULT_OK, data);
        finish();
    });

и в onResume HabitFragment:

public void onResume() {
    super.onResume();
    Gson gson = new Gson();
    Intent intent = this.getActivity().getIntent();
    String str = intent.getStringExtra("datesTimes");
    List<HabitDateAndTime> datesTimes = gson.fromJson(str, List.class);
}

Но когда я проверяю значение dateTimes, он говорит null, даже если я добавляю к нему что-то в дочернем действии.

Как правильно отправить ArrayList настраиваемых объектов из дочернего действия в родительский?

1 Ответ

2 голосов
/ 17 июня 2020

Начните для вашего ребенка Activity для результата, используя startActivityForResult(), а затем в своем дочернем Activity установите результат, после того как вы собрали свои данные от пользователя, используя setResult() и вручную завершите sh ваш ребенок Activity используя finish(). Затем снова в классе HabitLogFragment переопределите onActivityResult(), чтобы получить набор данных в вашем дочернем Activity.

Более подробную информацию см. В этом руководстве: https://developer.android.com/training/basics/intents/result .

...