sadr0b0t / vkurse

Automatically exported from code.google.com/p/vkurse
0 stars 0 forks source link

программа генерирует слишком много экранов #54

Closed GoogleCodeExporter closed 9 years ago

GoogleCodeExporter commented 9 years ago
Пример1:
- запустить программу и увидеть первый 
экран с расписанием
- нажать кнопку "назад"

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

судя по всему этот черный экран - отдельная 
активити, которая открывается первая при 
старте программы и которая при старте 
запускает активити с расписанием.

Пример2:
- на экране с расписанием выбрать меню 
"изменить группу" - откроется экран выбора 
группы
- на этом экране выбрать группу и нажать 
кнопку "ок" - мы окажемся на экране с 
расписанием - внешне все выглядит так, как и 
должно быть, но:
- нажать кнопку "надаз"
результат: мы окажемся на экране выбора 
группы, если нажать еще раз назад, то мы 
окажемся опять на экране с расписанием из 
которого уже можно попасть на рабочий стол. 
ожидаемый результат: при первом нажатии на 
кнопку "назад" программа должна была выйти 
на рабочий стол.

Аналогичная проблема с экраном, сообщающим 
об ошибке загрузки.

Причина в том, что при нажатии кнопки "ок" на 
экране выбора группы вызывается новая 
активити "список расписания" - андроид 
запоминает последовательность всех 
открытых активитей и при нажатии кнопки 
"назад" возвращается от последней к первой 
по всему стеку. Если при нажатии кнопки "ok" 
не открывать новую активити "расписание", а 
просто закрывать текущую (Activity.finish()), то 
приложение все равно попадет на экран 
"расписание" как нам и нужно, но при этом не 
будет генерировать последовательность 
открытых одинаковых активитей.

Если подвести итог, логика должна быть 
такая:
Для экрана "Расписание":
0. Прописать экран "расписание" главным 
экраном приложения, который открывается 
иконкой из ланчера приложений.
1. В методе onResume() считывать настройку "номер 
группы" (важно, чтобы это был именно метод 
onResume(), а не onCreate() - иначе в некоторых 
ситуациях список не будет обновляться)
1.1. Если настройка не задана, открывать 
экран выбора группы
1.2. Если настройка задана, пытаться 
загрузить расписание для выбранной группы 
на текущий день.

Для экрана "Выбор группы"/"ошибка загрузки":
1. При нажатии кнопки "ок" не открывать новый 
экран "расписание", а
1.1. Сохранять выбранную группу в настройки
1.2. Вызывать метод Activity.finish() - после этого 
программа вернется на экран "расписание" и 
вызовет у него мотод onResume() (но не onCreate()), в 
котором как было описано выше - произойдет 
запрос расписания для нового значения 
группы (которое уже попало в настройки).

//по остальным исправлениям - спасибо, все 
стало намного лучше - в принципе, кроме 
описанной здесь проблемы я сейчас никаких 
других необходимых исправлений не вижу.

Original issue reported on code.google.com by bender...@gmail.com on 12 Dec 2010 at 7:09

GoogleCodeExporter commented 9 years ago
Дело в том, что если на экране ошибки 
загрузки при нажатии на кнопку "Обновить" 
вызывается Activity.finish(), то приложение 
пытается снова загрузить расписание для 
данного дня недели и данной группы, но если 
интернет так и не появился, то снова 
показывает экран ошибки. Если же на экране 
загрузки нажать кнопку назад, то 
приложение возвращается снова на экран 
Schedule_Activity , который вновь загружает экран 
загрузки...То есть программа как бы 
зацикливается в отсутсвие интернета...

Original comment by olga.tit...@gtempaccount.com on 14 Dec 2010 at 7:05

GoogleCodeExporter commented 9 years ago
Понятно - хорошо, что сразу заметила. 
Решений вижу сразу три:

1. Избавиться от экрана ошибки как я 
предлагал и показывать сообщение об ошибке 
прямо на экране с расписанием - просто 
вместо надписи "нет занятий" показывать 
"ошибка загрузки" - остальные кнопки 
оставить на месте. Тогда у нас будет только 
один экран и кнопка "назад" ничего 
зацикливать не будет.

2. Показывать сообщение об ошибке не на 
отдельной активити, а в попап-диалоге 
(сейчас в похожем выбирается дата) - в 
диалог добавить две кнопки "обновить" и 
"выйти" - т.к. код диалога и в том числе 
обработчика события "выйти" будет 
находитсья также внутри активити 
"расписание", зацикливания так же не будет - 
кнопка "выйти" будет закрывать приложение.

3. Обрабатывать внутри активити 
"расписание" коды возврата из активити 
"ошибка". Для этого нужно открывать 
активити методом startActivityForResult, перед 
закрытием активити с ошибкой установить 
код возврата методом setResult и в 
первоначальной активити обрабатывать 
полученный код возврата в методе onActivityResult - 
если приходит RESULT_CANCELED - закрывать и 
текущую активити тоже. Пример есть прямо в 
java-доке для класса Activity.

Какой вариант нравится больше - решай сама. 
Я бы посоветовал использовать 1й - наиболее 
простой и при этом вполне интуитивный и 
удобный.

Original comment by bender...@gmail.com on 14 Dec 2010 at 7:21

GoogleCodeExporter commented 9 years ago

Original comment by olga.tit...@gtempaccount.com on 15 Dec 2010 at 12:03