У меня есть два вида деятельности: основная деятельность и деятельность детей.
Когда я нажимаю кнопку в основном задании, запускается дочернее действие.
Теперь я хочу отправить некоторые данные обратно на главный экран. Я использовал класс Bundle, но он не работает. Выдает некоторые исключения во время выполнения.
Есть ли решение для этого?
android
android-intent
Rajapandian
источник
источник
Ответы:
Есть несколько способов добиться того, чего вы хотите, в зависимости от обстоятельств.
Наиболее распространенный сценарий (который звучит как ваш) - это когда дочерняя активность используется для получения пользовательского ввода, например, выбора контакта из списка или ввода данных в диалоговом окне. В этом случае вы должны использовать
startActivityForResult
для запуска вашего ребенка Activity.Это обеспечивает конвейер для отправки данных обратно в основное действие с помощью
setResult
. Метод setResult принимает значение результата int и намерение, которое передается обратно в вызывающую активность.Для доступа к возвращенным данным в вызывающей активности переопределить
onActivityResult
. RequestCode соответствует целому числу, переданному вstartActivityForResult
вызове, а resultCode и Intent данных возвращаются из дочернего Activity.источник
startActivityForResult
функцию вместо простоstartActivity
. Примером может бытьstartActivityForResult(myIntent, 2);
где 2 - код результата, который может занять местоMY_CHILD_ACTIVITY
в приведенном выше операторе switch.Упражнение 1 использует startActivityForResult :
Активность 2 запущена, и вы можете выполнить операцию, чтобы закрыть Активность, сделайте это:
Упражнение 1 - возвращение из предыдущего занятия вызовет onActivityResult :
ОБНОВЛЕНИЕ: Ответ на комментарий Seenu69, Во второй деятельности,
Затем в первом упражнении
источник
Отправка данных назад
Это помогает мне видеть вещи в контексте. Вот полный простой проект для отправки данных обратно. Вместо предоставления файлов макета XML, здесь изображение.
Основное занятие
startActivityForResult
, предоставив ему произвольный код результата.onActivityResult
. Это называется, когда заканчивается второе задание. Вы можете убедиться, что это фактически Второе действие, проверив код запроса. (Это полезно, когда вы запускаете несколько разных действий из одного и того же основного действия.)Intent
. Данные извлекаются с использованием пары ключ-значение.MainActivity.java
Вторая деятельность
Intent
. Данные хранятся вIntent
паре ключ-значение.RESULT_OK
и добавьте намерение, содержащее ваши данные.finish()
чтобы закрыть Второе занятие.SecondActivity.java
Другие заметки
RESULT_OK
. Просто используйте полное имя:Activity.RESULT_OK
.Смотрите также
источник
FirstActivity использует startActivityForResult:
По вызову SecondActivity setResult () для событий onClick или onBackPressed ()
источник
Вызовите намерение дочернего действия с помощью вызова метода startActivityForResult ()
Вот пример этого здесь: http://developer.android.com/training/notepad/notepad-ex2.html
и в «Возвращении результата с экрана» этого: http://developer.android.com/guide/faq/commontasks.html#opennewscreen
источник
Я создал простой демонстрационный класс для вашего удобства.
источник
В первом упражнении вы можете отправить намерение с помощью,
startActivityForResult()
а затем получить результат второго занятия после того, как оно закончилосьsetResult
.MainActivity.class
SecondActivity.class
источник
Все эти ответы объясняют, что сценарий вашего второго действия должен быть завершен после отправки данных.
Но в случае, если вы не хотите завершать второе действие и хотите отправить данные обратно сначала, для этого вы можете использовать BroadCastReceiver.
Во втором занятии -
В первом действии
Зарегистрировать получателя в onCreate () -
Отмените регистрацию в onDestroy ()
источник
Другим способом достижения желаемого результата, который может быть лучше в зависимости от вашей ситуации, является создание интерфейса слушателя.
Вынуждая родительское действие слушать интерфейс, который запускается дочерним действием при передаче требуемых данных в качестве параметра, можно создать аналогичный набор обстоятельств
источник
Есть несколько способов сделать это. 1. с помощью startActivityForResult (), который очень хорошо объяснен в ответах выше.
создавая статические переменные в вашем классе "Utils" или любом другом вашем собственном классе. Например, я хочу передать studentId из ActivityB в ActivityA. Сначала моя ActivityA вызывает ActivityB. Затем внутри ActivityB установите идентификатор студента (который является статическим полем в Utils.class). Вот так Utils.STUDENT_ID = "1234"; затем, возвращаясь к ActivityA, используйте studentId, который хранится в Utils.STUDENT_ID.
создав метод получения и установки в вашем классе приложений.
как это:
так что вы сделали. просто установите данные внутри, когда вы находитесь в ActivityB, и после возвращения в ActivityA получите данные.
источник
Просто маленькая деталь, которая, я думаю, отсутствует в ответах выше.
Если ваши дочерние действия могут быть открыты из нескольких родительских действий, вы можете проверить, нужно ли вам это делать
setResult
или нет, в зависимости от того, была ли ваша деятельность открыта с помощьюstartActivity
илиstartActivityForResult
. Вы можете достичь этого с помощьюgetCallingActivity()
. Больше информации здесь .источник
Используйте sharedPreferences и сохраняйте свои данные и к ним доступ из любой точки приложения
сохранить дату, как это
И получать данные, как это
источник