Форум программистов, компьютерный форум, киберфорум
Наши страницы
Программирование Android
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.89/9: Рейтинг темы: голосов - 9, средняя оценка - 4.89
anknskn
0 / 0 / 0
Регистрация: 29.07.2014
Сообщений: 8
#1

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

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

Здравствуйте.
Ситуация такая. Из MainActivity вызывается другое Activity методом startActivityForResult. Это другое Activity переходит в состоянии Resume. Пользователь что-то там делает, и если выходит из него штатно (по назначенной кнопке), в MainActivity отрабатывает onActivityResult, и все нормально. Если же пользователь, находясь во втором Activity, нажимает клавишу "назад", возникает исключительная ситуация, приложение зависает. Пытался обрабатывать эту ситуацию в методе onPause(), упаковывая данные для передачи в MainActivity (putExtra()) как если бы пользователь выходил штатно, но ничего не получилось - в MainActivity, похоже, ничего не передается.
Ситуация вроде стандартная - есть главная активность и активность настроек. При "правильном" выходе все работает,
при "неправильном" не могу даже отловить в главной активности, что выход из настроек выполнен по клавише "назад".
Что делать?
Заранее большое спасибо.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
07.01.2015, 14:49
Ответы с готовыми решениями:

Settings Activity - При нажатии клавиши "Назад" не происходит возвращение на главный активити
Всем привет! Столкнулся с такой проблемой при добавлении Settings Activity в...

StartActivityForResult: не сохраняется предыдущее состояние activity
Здравствуйте. В приложении есть 3 activity: 1. Главная activity 2....

Сворачивание приложения при нажатии кнопки "Назад"
Как сделать, чтобы при нажатии кнопки "назад" приложение не закрывалось, а...

Admob interstitial. Запретить закрытие кнопкой "назад"
Как сделать так, чтобы межстраничное объявление закрывалось только нажатием на...

Toolbar как отслеживать кнопку "стрелка назад"
Всем привет, работаю с Toolbar. Задача такая: 1. по клику в NavigationView,...

10
DemD10
59 / 48 / 13
Регистрация: 03.09.2013
Сообщений: 465
08.01.2015, 14:03 #2
Обязательно startActivityForResult?
0
anknskn
0 / 0 / 0
Регистрация: 29.07.2014
Сообщений: 8
08.01.2015, 17:03  [ТС] #3
Ну, не знаю... А как вернуть данные из другого активити? С базой данных - понятно, а проще?
0
Kastaneda
Jesus loves me
Эксперт С++
4823 / 2997 / 345
Регистрация: 12.12.2009
Сообщений: 7,559
Записей в блоге: 2
Завершенные тесты: 1
08.01.2015, 21:38 #4
onPause() и onStop() не вызываются в данном случае, т.к. андроид считает, что раз пользователь выходит по нажатию "back", то это активити ему больше не нужно.
Можно переопределить onBackPressed()
Java
1
2
3
4
    @Override
    public void onBackPressed() {
        super.onBackPressed();
    }
который будет вызван при нажатии back.
0
anknskn
0 / 0 / 0
Регистрация: 29.07.2014
Сообщений: 8
09.01.2015, 08:43  [ТС] #5
onPause() вызывается, его в логе отловить можно. Попробую с onBackPressed(). Что получится - напишу.
0
Sony17
28 / 28 / 10
Регистрация: 24.05.2013
Сообщений: 157
09.01.2015, 15:35 #6
Когда возникают подобные вопросы, значит логика приложения плохая.

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

Если пользователь захочет эти данные применить, то он нажмет кнопку. В этом случае, у Вас все работает, как говорите.
0
anknskn
0 / 0 / 0
Регистрация: 29.07.2014
Сообщений: 8
09.01.2015, 15:53  [ТС] #7
Спасибо за отклик. На мой взгляд, действия пользователя предугадать трудно (а мысли хочет - не хочет - невозможно), и желательно обрабатывать все его возможные действия. Возврат к предыдущему, с точки зрения пользователя, ЭКРАНУ по клавише back - самое привычное его действие. А что такое Активити и сколько их - для подавляющего числа пользователей вообще вещь в себе. Он может считать, что введя на текущем экране данные и нажав back, он поступил вполне корректно. Может, так оно и есть. По-хорошему, лишней является кнопка, по которой у меня все работает, а возвращаться нужно как раз по клавише back. А почему в onPause не отрабатывают методы putExtra - вот это странно.
На мой взгляд, ситуация типичная для приложений, где, например, в окне настроек (второе активити) пользователь вводит данные, которые нужно передать в вызывающее Активити. Таких приложений миллион - и такая ситуация должна быть вылизана многократно, и для нее должно быть типичное решение. Может, я чего-то не понимаю, объясните - буду благодарен.
0
Andruy94
1 / 1 / 0
Регистрация: 22.08.2014
Сообщений: 14
13.01.2015, 20:25 #8
Добрый вечер,а вы пытались использовать Intent?
0
anknskn
0 / 0 / 0
Регистрация: 29.07.2014
Сообщений: 8
13.01.2015, 20:49  [ТС] #9
Здравствуйте.
Так все через intent и делается.
В основном активити:
intent.setClass(this, ...);
intent.putExtra(...);
...
startActivityForResult(intent,1);
Во втором - соответствующие get, в onActivityResult - снова get...
На самом деле проблему я как-то решил, но хотелось бы получить ответ эксперта. А решил так. Формальным параметром метода onActivityResult является int resultCode, которым равен 0, если что-то пошло не так, при вызове метода get... в основном активити. Его проверяешь, и если 0 - не вызываешь getExtra, как-то по-другому задаешь значения возвращаемых переменных. Но как-то странно все это. Похоже, в методе onPause(), который можно вызвать во втором активити, далеко не все команды выполняются. Как-то так ...
0
Andruy94
1 / 1 / 0
Регистрация: 22.08.2014
Сообщений: 14
13.01.2015, 22:57 #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
0
Diffuse
18 / 10 / 0
Регистрация: 28.11.2014
Сообщений: 151
13.01.2015, 23:24 #11
если я правильно понял то из первого активити второй нужно вызвать просто через стартактивити.
0
13.01.2015, 23:24
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
13.01.2015, 23:24

В созданном браузере при нажатии кнопки "Назад" выходит из приложения
Всем привет! Недавно начал изучать как разрабатывать приложения под Android....

Как обработать нажатие кнопки "Назад", чтобы открывался рекламный баннер?
Требуется помощь. Начал осваивать это все недавно. Расскажу суть идеи: создав...

Установить стрелку "назад" в action bar, что бы возвращаться к первому фрагменту
Добрый день.Это снова я) И новый вопрос, есть активити и несколько...


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

Или воспользуйтесь поиском по форуму:
11
Ответ Создать тему
Опции темы

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