Форум программистов, компьютерный форум, киберфорум
Наши страницы

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

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

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

07.01.2015, 14:49. Просмотров 1406. Ответов 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
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Выход пользователя по клавише "назад" из Activity, вызванного методом startActivityForResult (Программирование Android):

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

StartActivityForResult: не сохраняется предыдущее состояние activity - Программирование Android
Здравствуйте. В приложении есть 3 activity: 1. Главная activity 2. activity для выбора цвета 3. activity для выбора Gravity ...

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

Toolbar как отслеживать кнопку "стрелка назад" - Программирование Android
Всем привет, работаю с Toolbar. Задача такая: 1. по клику в NavigationView, открываю Фрагмент. 2. в открытом фрагменте, загрузить...

Сворачивание приложения при нажатии кнопки "Назад" - Программирование Android
Как сделать, чтобы при нажатии кнопки "назад" приложение не закрывалось, а сворачивалось?

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

10
DemD10
58 / 47 / 12
Регистрация: 03.09.2013
Сообщений: 443
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
Эксперт С++
4722 / 2926 / 242
Регистрация: 12.12.2009
Сообщений: 7,440
Записей в блоге: 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 / 6
Регистрация: 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
Требуется помощь. Начал осваивать это все недавно. Расскажу суть идеи: создав проект в Android Studio, был выбран активити "Google AdMob...

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

Полное завершение работы приложения при нажатии навигационной кнопки "Назад" - Программирование Android
Здравствуйте. Имеется приложение. При нажатии кнопки "Домой" приложение выходит на главный экран и остается активным в панели...

Свой Launcher. Срабатывает кнопка "назад" - Программирование Android
Здравствуйте! -Пишу свой простенький Laucher(во многом опирался на этот пример). -Тестирую на телефоне(texet). -При загрузке...


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

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

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