Простой вопрос для тех, кто хорошо понимает архитектуру кода

Ответить
Аватара пользователя
Foenix
Сообщения: 4201
Зарегистрирован: 20 окт 2012, 12:01

Простой вопрос для тех, кто хорошо понимает архитектуру кода

Сообщение Foenix » 01 дек 2012, 00:01

Т.к. мне уже пришлось ознакомиться с заморочистыми активити, фрагменты, фрагментдиалоги и т.д. я тут задумалась - как мне правильно построить код.
Алгоритм у меня такой (пишу образно, без тонкостей).
1. Главная активити.
ПО выбору одного из пунктов меню должно происходить следующая логика.
2. Диалог спрашивает у пользователя кое-что. Если ОК, то
3. Появляется активити, делает там свои дела, вызывает другие активити и т.д. Когда пользователь наконец-то отуда уходит кнопкой "назад"
4. Появляется еще одна активити. Тоже занимается своими делами, а когда пользователь и ее отменит кнопкой назад
5. Главная активити продолжает свою работу.

Раньше бы я с удовольтвием написала бы это все в одной процедуре, т.к. после завершения активити и тем паче диалогов мы возвращаемся в ту же самую процедуру.
А теперь, уже на шаге 2, после завершения диалога, я попадаю в процедуру onFinishDialog(). Да, там я могу почитать, что ввел пользователь, но как мне вернуться обратно, к процедуре, вызвавшей этот диалог в точку, где он был вызван?
Если же продолжить логику в другой процедуре - получится для меня лично плохо читаемый код - что где кончается и куда продолжается.
Мне надо как-то оформить шаги 2-4 в один хорошо читаемый код, без лишних заморочек.
Это возможно? как правильно это делается?

Пожалуйста, если кто-то захочет помочь, пишите попонятнее, а то я могу еще пару часов убить, разыскивая в гугле разные сокращения, чтобы убедиться, что мне это не подходит, или я не смогу это реализовать всилу своих способностей.
R.id.team

NullPointerException - что делать???
viewtopic.php?f=33&t=3899&p=28952#p28952
Где моя ошибка?
viewtopic.php?f=60&t=3198

Аватара пользователя
rezak90
Сообщения: 3422
Зарегистрирован: 26 июн 2012, 13:22
Откуда: UA
Контактная информация:

Re: Простой вопрос для тех, кто хорошо понимает архитектуру

Сообщение rezak90 » 01 дек 2012, 03:49

не какого конкретного вопроса... так что отвечу что понял... создайте активити базовое от которого наследуйте все ваши активити, в базовом всегда запоминайте от куда и куда пришли... второй вариант реализовать глобальный бандл и перед вызовом какой либо активити писать в бандл от куда мы пришли и в след. активити парсить бандл.
R.id.team
Политика на форуме запрещена

Аватара пользователя
Foenix
Сообщения: 4201
Зарегистрирован: 20 окт 2012, 12:01

Re: Простой вопрос для тех, кто хорошо понимает архитектуру

Сообщение Foenix » 01 дек 2012, 18:27

вы меня вообще неправильно поняли. Вопрос там конкретный.
Основное активити у меня есть, она под номером 1 стоит. Наследовать мне сложно, это раз (см. последний абзац), я и так с трудом уже понимаю логику всех моих "наследований" с фрагментами (там просто у меня уже есть две довольно сложные линии, из-за поворота экрана), а если у меня еще будут наследования, это воообще п-ц), причем я сам смысл наследования при этих обстоятельствах не понимаю совершенно.
А придумать как извратиться с бандлами или нет - это я и так придумаю. Мне надо знать как это ПРАВИЛЬНО делают, а не с помощью глобальных переменных.
Моя цель - читаемый код, ни с первым советом. ни со вторым я его не получаю, увы..
R.id.team

NullPointerException - что делать???
viewtopic.php?f=33&t=3899&p=28952#p28952
Где моя ошибка?
viewtopic.php?f=60&t=3198

Аватара пользователя
rezak90
Сообщения: 3422
Зарегистрирован: 26 июн 2012, 13:22
Откуда: UA
Контактная информация:

Re: Простой вопрос для тех, кто хорошо понимает архитектуру

Сообщение rezak90 » 01 дек 2012, 22:51

перечитал всё таки ещё раз
Раньше бы я с удовольтвием написала бы это все в одной процедуре, т.к. после завершения активити и тем паче диалогов мы возвращаемся в ту же самую процедуру.
А теперь, уже на шаге 2, после завершения диалога, я попадаю в процедуру onFinishDialog(). Да, там я могу почитать, что ввел пользователь, но как мне вернуться обратно, к процедуре, вызвавшей этот диалог в точку, где он был вызван?
1) обрабатывайте кнопку back и вызывайте нужное вам активити;
2) используйте FragmentManager или ActivityManager для управления активностей;
3) переопределение о котором я писал в предыдущем сообщении;

P.S. как я сделал в своём приложении:
определил базовую активити в которой переопределил нужные мне методы и кнопку бек, так же храню там бандл, все остальные активити наследуются (extends) от главной активити и данные сохраняются в бандл, перед тем как открыть какое то активити вызывается не интент а мой метод goToActivity(_имя_нужной_активити) и стартует нужная мне активити, а через бандл я могу передать любую мне необходимую инфу.
P.P.S. возможно сложную систему я описал, но вы спросили, а я ответил.

решил написать понятнее, у меня используется табхост, но переписать пару строчек под активити не проблема:

Код: Выделить всё

public class BaseActivity extends Activity {
	private Bundle dataBundle = null;
	private TypeActivity typeActivity; //enum для идентификации активити
	//конструкторы и т.д.
	@Override
	public boolean onKeyDown(int keyCode, KeyEvent event)
	{
		if (keyCode == KeyEvent.KEYCODE_BACK))
		{
			tabHost.setCurrentTabByTag(typeActivity.name());
			return true;
		}
		return super.onKeyDown(keyCode, event);
	}
	public void gotoActivity(TypeActivity activity)
	{
		mainTabHost.setCurrentTabByTag(activity.name());
	}
}

Код: Выделить всё

public class MainActivity extends BaseActivity {
//ваш код
}
R.id.team
Политика на форуме запрещена

Аватара пользователя
Foenix
Сообщения: 4201
Зарегистрирован: 20 окт 2012, 12:01

Re: Простой вопрос для тех, кто хорошо понимает архитектуру

Сообщение Foenix » 01 дек 2012, 23:58

Круто, интересно, как вы до этого додумались?

Я вот сейчас понимаю, что у меня раньше (до java android) тоже было много подобного наворочено - там формы были до третьего-четвертого уровня наследования, но там я была уже давно в своей тарелке, не сразу стала так писать. А тут - я пишу, наверное, как первоклассник. Мало было времени на обдумывание. Но приложение, надеюсь, не будет сложным, поэтому это не большая потеря.. Я вижу новую среду и теряюсь, наверное, как будто я забыла все, что проделывала раньше. Система еще в голове не сложилась.

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

NullPointerException - что делать???
viewtopic.php?f=33&t=3899&p=28952#p28952
Где моя ошибка?
viewtopic.php?f=60&t=3198

Аватара пользователя
rezak90
Сообщения: 3422
Зарегистрирован: 26 июн 2012, 13:22
Откуда: UA
Контактная информация:

Re: Простой вопрос для тех, кто хорошо понимает архитектуру

Сообщение rezak90 » 02 дек 2012, 01:28

У вас табы для какой-то искусственной цели, вместо ряда активити или табы как они есть?
табы как они есть =)
А можете написать хотя бы примерно как будет выглядеть в вашем случае вызов такой последовательности диалогов и активити как я написала?
ну диалог вызывается как и всегда, в случае результата диалога грузим соответствующую активити (метод gotoActivity), и последовательности вызова активити нету, вы можете вызвать любое активити с любого места приложения, таким образом пропадает последовательность и у вас более развязаны руки как у разработчика.
R.id.team
Политика на форуме запрещена

AndreyI
Сообщения: 372
Зарегистрирован: 14 май 2012, 16:18

Re: Простой вопрос для тех, кто хорошо понимает архитектуру

Сообщение AndreyI » 02 дек 2012, 05:30

Описанный метод вызова activity не совсем стандартный подход, но имеет место быть, если программист решит, что так будет удобнее для пользователей.
Если хотите писать тру-андроид приложения, то придерживайтесь рекомендаций гугла по оформлению интерфейса. И смотрите как построены гугловские приложения. Они сейчас тоже меняются, стараются обрести свое лицо. И если вы пользуетесь приложениями серьезных контор (тех, кто отмечен на маркете как лучший разработчик), то наверняка заметили, что они так же обновляют UI своих приложений, подгоняя их к стандартам оформления Андроид.
От панелей управления с кучей иконок как на рабочем столе сейчас отказываются, в пользу боковых панелей с меню, в дополнение к табам и Action Bar, думаю, в скором времени они также войдут в стандарт API Android. Ну а сама навигация (вызов activity) во всех случаях реализуется не в виде кнопок, а в виде элементов списков, этот механизм более гибок и его применяют везде и повсеместно, достаточно посмотреть примеры (ApiDemos).

Аватара пользователя
Foenix
Сообщения: 4201
Зарегистрирован: 20 окт 2012, 12:01

Re: Простой вопрос для тех, кто хорошо понимает архитектуру

Сообщение Foenix » 02 дек 2012, 10:22

AndreyI писал(а):Описанный метод вызова activity не совсем стандартный подход, но имеет место быть, если программист решит, что так будет удобнее для пользователей.
Если хотите писать тру-андроид приложения, то придерживайтесь рекомендаций гугла по оформлению интерфейса. И смотрите как построены гугловские приложения. Они сейчас тоже меняются, стараются обрести свое лицо. И если вы пользуетесь приложениями серьезных контор (тех, кто отмечен на маркете как лучший разработчик), то наверняка заметили, что они так же обновляют UI своих приложений, подгоняя их к стандартам оформления Андроид.
От панелей управления с кучей иконок как на рабочем столе сейчас отказываются, в пользу боковых панелей с меню, в дополнение к табам и Action Bar, думаю, в скором времени они также войдут в стандарт API Android. Ну а сама навигация (вызов activity) во всех случаях реализуется не в виде кнопок, а в виде элементов списков, этот механизм более гибок и его применяют везде и повсеместно, достаточно посмотреть примеры (ApiDemos).
Андрей, если это ко мне, то как-то странно, я про UI ничего не писала.
Если бы вы меня знали, я бы оскорбилась)))) перед написанием проги первое, что я проштудировала - это вышеописанные вами ссылки. У меня в программе все, что сооветствует выбранному мною 14 апи и интерфейсу к нему ;) Я с проектированием интерфейса возилась долго (хотя многого не добилась), чтоб даже напрашивающиеся контекстные меню логично убрать.

У меня вопрос был про внутренности, а с внутренностями на сайте девелопера - очень все запущено! Сколько раз натыкаюсь на устаревший код и код с ошибками, неполный (такое впечатление, что недоделаный). Если бы там были у них рекомендации по коду, я бы тут не опрашивала народ..
Наверное, надо какие-то фундаментальные труды по java лопатить.
R.id.team

NullPointerException - что делать???
viewtopic.php?f=33&t=3899&p=28952#p28952
Где моя ошибка?
viewtopic.php?f=60&t=3198

AndreyI
Сообщения: 372
Зарегистрирован: 14 май 2012, 16:18

Re: Простой вопрос для тех, кто хорошо понимает архитектуру

Сообщение AndreyI » 02 дек 2012, 10:41

Прошу прощения, что не так понял. :)
Если трудности с JAVA, то конечно, нужно знать хотя бы её основы.

Аватара пользователя
Foenix
Сообщения: 4201
Зарегистрирован: 20 окт 2012, 12:01

Re: Простой вопрос для тех, кто хорошо понимает архитектуру

Сообщение Foenix » 02 дек 2012, 10:46

Скорее, у меня трудности с проектированием на java, скажем так.
R.id.team

NullPointerException - что делать???
viewtopic.php?f=33&t=3899&p=28952#p28952
Где моя ошибка?
viewtopic.php?f=60&t=3198

Аватара пользователя
rezak90
Сообщения: 3422
Зарегистрирован: 26 июн 2012, 13:22
Откуда: UA
Контактная информация:

Re: Простой вопрос для тех, кто хорошо понимает архитектуру

Сообщение rezak90 » 02 дек 2012, 13:20

Если хотите писать тру-андроид приложения, то придерживайтесь рекомендаций гугла по оформлению интерфейса. И смотрите как построены гугловские приложения.
Это печально но всё зависит от заказчика. Вот присылает он дизайн и как хочешь но делай. А ещё печальней когда присылают дизайн слизанный с айфона и нужно делать так как у них. Было совсем иначе если бы были развязаны у разработчика руки на все 100%, а так всё выглядит иначе.
R.id.team
Политика на форуме запрещена

AndreyI
Сообщения: 372
Зарегистрирован: 14 май 2012, 16:18

Re: Простой вопрос для тех, кто хорошо понимает архитектуру

Сообщение AndreyI » 02 дек 2012, 14:04

Кто платит тот и музыку заказывает, тут никуда не денешься, хочет дизайн огрызка пусть и получает огрызок. Андроид еще очень молод в сравнении с другими, все стандарты оформления UI только формируются. Но когда пользователи начнут привыкать к этим стандартам заказчиков с подобными заявками поубавится. Пользователи никогда не державшие в руках огрызок не поймут в чем прикол такого интерфейса. Тут даже дело не в красоте или удобстве, а в привычках, которые у них сформируются при использовании других приложений на Андроид, а они могут оказаться сильнее понтов огрызка.

Аватара пользователя
Foenix
Сообщения: 4201
Зарегистрирован: 20 окт 2012, 12:01

Re: Простой вопрос для тех, кто хорошо понимает архитектуру

Сообщение Foenix » 02 дек 2012, 15:56

на девелопере видела целую статейку о параметрах интерфейса, где был справа дизайн (примеры) от ios, слева android, и было написано DON"T DO

Не знаю насколько такой заказчик уверен в таком желании, но я бы ненавязчиво убедила, что на андроиде так делать не стоит :)
Пользователей воспитываю много-примного лет, никто еще не сопротивлялся слишком долго. Они могу такого захотеть!
Вот когда мне давали задание, они хотели при вводе цифр в поле "пальчиком водить по экрану" - вверх - увеличивает количество на 1, вниз -уменьшает, как будет на сто плюс - они не задумываются. Спокойно делаю что считаю нужным, думаю, никто про пальчик не вспомнит.

http://developer.android.com/design/pat ... droid.html
Последний раз редактировалось Foenix 02 дек 2012, 18:12, всего редактировалось 1 раз.
R.id.team

NullPointerException - что делать???
viewtopic.php?f=33&t=3899&p=28952#p28952
Где моя ошибка?
viewtopic.php?f=60&t=3198

Аватара пользователя
rezak90
Сообщения: 3422
Зарегистрирован: 26 июн 2012, 13:22
Откуда: UA
Контактная информация:

Re: Простой вопрос для тех, кто хорошо понимает архитектуру

Сообщение rezak90 » 02 дек 2012, 17:05

Здесь всё зависит от рынка, если у вас заказчик западный (европа или сша) то он будет ориентироваться на айфон, и большинство заказчиков хотят идентичные приложения по дизайну, по этому приходится копировать весь функционал и дизайн с айфона.
Вот сейчас подкатила халтурка одному местному магазину нужно приложение под андроид, так как доля айфонщиков очень мала то его конечно интересует андроид, и здесь уже у меня развязаны руки.
R.id.team
Политика на форуме запрещена

brucemax
Сообщения: 117
Зарегистрирован: 01 апр 2012, 16:09
Откуда: Минск
Контактная информация:

Re: Простой вопрос для тех, кто хорошо понимает архитектуру

Сообщение brucemax » 03 дек 2012, 15:45

rezak90 писал(а):P.S. как я сделал в своём приложении:
определил базовую активити в которой переопределил нужные мне методы и кнопку бек, так же храню там бандл, все остальные активити наследуются (extends) от главной активити и данные сохраняются в бандл, перед тем как открыть какое то активити вызывается не интент а мой метод goToActivity(_имя_нужной_активити) и стартует нужная мне активити, а через бандл я могу передать любую мне необходимую инфу.
Заявите как паттерн! =))) А сначала напишите соответсвующий урок!!! А то я до конца не понял :)

Аватара пользователя
rezak90
Сообщения: 3422
Зарегистрирован: 26 июн 2012, 13:22
Откуда: UA
Контактная информация:

Re: Простой вопрос для тех, кто хорошо понимает архитектуру

Сообщение rezak90 » 03 дек 2012, 16:30

это коммерческий код :D
R.id.team
Политика на форуме запрещена

Ответить