Форум программистов, компьютерный форум CyberForum.ru

Программирование Android

Войти
Регистрация
Восстановить пароль
 
anknskn
0 / 0 / 0
Регистрация: 29.07.2014
Сообщений: 8
#1

Выход пользователя по клавише "назад" из Activity, вызванного методом startActivityForResult - Программирование Android

07.01.2015, 14:49. Просмотров 1131. Ответов 10
Метки нет (Все метки)

Здравствуйте.
Ситуация такая. Из MainActivity вызывается другое Activity методом startActivityForResult. Это другое Activity переходит в состоянии Resume. Пользователь что-то там делает, и если выходит из него штатно (по назначенной кнопке), в MainActivity отрабатывает onActivityResult, и все нормально. Если же пользователь, находясь во втором Activity, нажимает клавишу "назад", возникает исключительная ситуация, приложение зависает. Пытался обрабатывать эту ситуацию в методе onPause(), упаковывая данные для передачи в MainActivity (putExtra()) как если бы пользователь выходил штатно, но ничего не получилось - в MainActivity, похоже, ничего не передается.
Ситуация вроде стандартная - есть главная активность и активность настроек. При "правильном" выходе все работает,
при "неправильном" не могу даже отловить в главной активности, что выход из настроек выполнен по клавише "назад".
Что делать?
Заранее большое спасибо.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
07.01.2015, 14:49     Выход пользователя по клавише "назад" из Activity, вызванного методом startActivityForResult
Посмотрите здесь:
Settings Activity - При нажатии клавиши "Назад" не происходит возвращение на главный активити Android
StartActivityForResult: не сохраняется предыдущее состояние activity Android
Android Admob interstitial. Запретить закрытие кнопкой "назад"
Android Toolbar как отслеживать кнопку "стрелка назад"
Сворачивание приложения при нажатии кнопки "Назад" Android
Android В созданном браузере при нажатии кнопки "Назад" выходит из приложения
Как обработать нажатие кнопки "Назад", чтобы открывался рекламный баннер? Android
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
DemD10
58 / 47 / 12
Регистрация: 03.09.2013
Сообщений: 434
08.01.2015, 14:03     Выход пользователя по клавише "назад" из Activity, вызванного методом startActivityForResult #2
Обязательно startActivityForResult?
anknskn
0 / 0 / 0
Регистрация: 29.07.2014
Сообщений: 8
08.01.2015, 17:03  [ТС]     Выход пользователя по клавише "назад" из Activity, вызванного методом startActivityForResult #3
Ну, не знаю... А как вернуть данные из другого активити? С базой данных - понятно, а проще?
Kastaneda
Форумчанин
Эксперт С++
4479 / 2841 / 226
Регистрация: 12.12.2009
Сообщений: 7,222
Записей в блоге: 1
Завершенные тесты: 1
08.01.2015, 21:38     Выход пользователя по клавише "назад" из Activity, вызванного методом startActivityForResult #4
onPause() и onStop() не вызываются в данном случае, т.к. андроид считает, что раз пользователь выходит по нажатию "back", то это активити ему больше не нужно.
Можно переопределить onBackPressed()
Java
1
2
3
4
    @Override
    public void onBackPressed() {
        super.onBackPressed();
    }
который будет вызван при нажатии back.
anknskn
0 / 0 / 0
Регистрация: 29.07.2014
Сообщений: 8
09.01.2015, 08:43  [ТС]     Выход пользователя по клавише "назад" из Activity, вызванного методом startActivityForResult #5
onPause() вызывается, его в логе отловить можно. Попробую с onBackPressed(). Что получится - напишу.
Sony17
28 / 28 / 6
Регистрация: 24.05.2013
Сообщений: 157
09.01.2015, 15:35     Выход пользователя по клавише "назад" из Activity, вызванного методом startActivityForResult #6
Когда возникают подобные вопросы, значит логика приложения плохая.

Если пользователь возвращается через back, значит он не хочет, чтобы данные из 'другое Activity' были применены. А значит и не нужно эти данные как-то пытаться передать.

Если пользователь захочет эти данные применить, то он нажмет кнопку. В этом случае, у Вас все работает, как говорите.
anknskn
0 / 0 / 0
Регистрация: 29.07.2014
Сообщений: 8
09.01.2015, 15:53  [ТС]     Выход пользователя по клавише "назад" из Activity, вызванного методом startActivityForResult #7
Спасибо за отклик. На мой взгляд, действия пользователя предугадать трудно (а мысли хочет - не хочет - невозможно), и желательно обрабатывать все его возможные действия. Возврат к предыдущему, с точки зрения пользователя, ЭКРАНУ по клавише back - самое привычное его действие. А что такое Активити и сколько их - для подавляющего числа пользователей вообще вещь в себе. Он может считать, что введя на текущем экране данные и нажав back, он поступил вполне корректно. Может, так оно и есть. По-хорошему, лишней является кнопка, по которой у меня все работает, а возвращаться нужно как раз по клавише back. А почему в onPause не отрабатывают методы putExtra - вот это странно.
На мой взгляд, ситуация типичная для приложений, где, например, в окне настроек (второе активити) пользователь вводит данные, которые нужно передать в вызывающее Активити. Таких приложений миллион - и такая ситуация должна быть вылизана многократно, и для нее должно быть типичное решение. Может, я чего-то не понимаю, объясните - буду благодарен.
Andruy94
1 / 1 / 0
Регистрация: 22.08.2014
Сообщений: 14
13.01.2015, 20:25     Выход пользователя по клавише "назад" из Activity, вызванного методом startActivityForResult #8
Добрый вечер,а вы пытались использовать Intent?
anknskn
0 / 0 / 0
Регистрация: 29.07.2014
Сообщений: 8
13.01.2015, 20:49  [ТС]     Выход пользователя по клавише "назад" из Activity, вызванного методом startActivityForResult #9
Здравствуйте.
Так все через intent и делается.
В основном активити:
intent.setClass(this, ...);
intent.putExtra(...);
...
startActivityForResult(intent,1);
Во втором - соответствующие get, в onActivityResult - снова get...
На самом деле проблему я как-то решил, но хотелось бы получить ответ эксперта. А решил так. Формальным параметром метода onActivityResult является int resultCode, которым равен 0, если что-то пошло не так, при вызове метода get... в основном активити. Его проверяешь, и если 0 - не вызываешь getExtra, как-то по-другому задаешь значения возвращаемых переменных. Но как-то странно все это. Похоже, в методе onPause(), который можно вызвать во втором активити, далеко не все команды выполняются. Как-то так ...
Andruy94
1 / 1 / 0
Регистрация: 22.08.2014
Сообщений: 14
13.01.2015, 22:57     Выход пользователя по клавише "назад" из Activity, вызванного методом startActivityForResult #10
Java
1
2
3
4
5
6
7
8
  @Override
    public void onBackPressed() {
        // TODO Auto-generated method stub  
        Intent intent = new Intent();
        intent.putExtra("color", Color.BLUE);
        setResult(RESULT_OK, intent);
        super.onBackPressed();
    }
вот пашет,если что это кусок из 2го активити,которые вешает putExtra
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
13.01.2015, 23:24     Выход пользователя по клавише "назад" из Activity, вызванного методом startActivityForResult
Еще ссылки по теме:
Android Полное завершение работы приложения при нажатии навигационной кнопки "Назад"
Установить стрелку "назад" в action bar, что бы возвращаться к первому фрагменту Android
Android Свой Launcher. Срабатывает кнопка "назад"
Android Предусмотреть функцию "Назад" для фрагментов
Как сделать приложение полноэкранным и убрать вспомогательные кнопки "назад, главный экран." Android

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
Diffuse
18 / 10 / 0
Регистрация: 28.11.2014
Сообщений: 151
13.01.2015, 23:24     Выход пользователя по клавише "назад" из Activity, вызванного методом startActivityForResult #11
если я правильно понял то из первого активити второй нужно вызвать просто через стартактивити.
Yandex
Объявления
13.01.2015, 23:24     Выход пользователя по клавише "назад" из Activity, вызванного методом startActivityForResult
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru