Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
||
ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
[18.97.14.86] |
|
Сообщ.
#1
,
|
|
|
Всем привет!
Продолжаю разрабатывать Android-приложение для сдужбы такси. Так как это мое первое Android-приложение, опыт начинаю набирать с нуля, до этого только с Java для PC работал. Сейчас уже надо бы разметить каркас приложения. Одной формой тут не обойтись, всякие настройки и диалоги должны быть выполнены в отдельных формах (называю так по аналогии с формами в Delphi/С++ Builder). Вот сам вопрос: как лучше создавать эти диалоги? Если, конечно, есть альтернативы. В книге Алексея Голошапова по программированию для мобильных устройств вычитал, что для создания диалогов используется методов деятельности showDialog(). Соответственно, в переопределяемом методе onCreateDialog() можно загрузить лэйаут диалога из ресурсов, настроить его и вернуть как результат объект этого диалога. Но диалог, который создается в программном примере, лишь частично перекрывает главную форму. А мне бы хотелось, чтобы этот диалог разворачивался на весь экран, мне кажется, так будет как-то удобнее, так как главная форма во время работы диалога будет не нужна (ну перекроется пара вьюх-индикаторов, но это не будет большой потерей). Как это сделать? Либо, может есть какой-то другой способ создать и показать форму, чей лэйаут набросан в ресурсах? Еще, Дамы и Господа, может, кто-нибудь подскажет хорушую литературку по программированию для Android. Во-первых, книга Головошапова у меня в виде сканированного но нераспознанного текста в pdf, так что крайне неудобно пользоваться, содержания также нет, которое можно было бы отдельно просмотреть, чтобы переходить по его ссылкам. Во-вторых, мне не очень нравится подача материала, очень символические примеры (например, по сравнению с книгой Хорстмана по Java, читать которую у меня составило большое удовольствие). Заранее всем спасибо! |
Сообщ.
#2
,
|
|
|
Читани вот это http://developer.alexanderklimov.ru/android/ много интересного, я сам начинающий
|
Сообщ.
#3
,
|
|
|
Ну, ресурс вообще-то не очень богатый, я там не нашел особо чего-то большего, чем в книге, которая у меня лежит в электронном виде, хотя, наверно, примеры поинтереснее, не бесплотные. Но вот ответа на мой вопрос по другим окнам в приложении нет. Есть пример диалога кастомного, но он не на весь экран, как бы я хотел.
|
Сообщ.
#4
,
|
|
|
Превед!
Альтернативы такие: 1) Наследоваться от Dialog 2) Использовать что то типа AlertDialog: LinearLayout dialogLayout = (LinearLayout) ((LayoutInflater) getSystemService(Context.LAYOUT_INFLATER_SERVICE)).inflate(R.layout.numberpeacker, null); Builder builder = new AlertDialog.Builder(this); builder.setView(dialogLayout); builder.setTitle("Hello"); builder.create().show(); 3) Использовать отдельные активити в качестве диалога, добавив её в манифест и стартуя при помощи StartActivity or StartActivityForResult 4) Если собираешся поддерживать 3.х и выше на планшетах, или же есть желание использовать пакет совместимости, то можно использовать Fragments Добавлено Цитата jaroslav.zp.ua @ Читани вот это http://developer.alexanderklimov.ru/android/ много интересного, я сам начинающий Ага, именно если начинающий, то надо начинать читать всякий шлак. Есть только один правильный ресурс, и на нём тоже примеров завались. Более того, все примеры есть в SDK. http://developer.android.com/guide/index.html |
Сообщ.
#5
,
|
|
|
Цитата Британский учёный @ 2) Использовать что то типа AlertDialog: А смысл использовать AlertDialog, коли ему подпихивать свой ресурс? Уж тогда лучше прямо использовать Dialog. Цитата Британский учёный @ 3) Использовать отдельные активити в качестве диалога, добавив её в манифест и стартуя при помощи StartActivity or StartActivityForResult Вот пример бы хорошо увидеть. Цитата Британский учёный @ 4) Если собираешся поддерживать 3.х и выше на планшетах, или же есть желание использовать пакет совместимости, то можно использовать Fragments Ну я сейчас остановиля на платформе 2.1. Повышать до 3 как-то не гут - наверно, много девайсов просто этим срежутся. Добавлено Цитата Британский учёный @ 3) Использовать отдельные активити в качестве диалога, добавив её в манифест и стартуя при помощи StartActivity or StartActivityForResult Гм, при запуске же отдельной деятельности ранее активная деятельность становится на паузу. Что будет при этом, например, с функционированием таймера? Это важно, так как каждые 10 секунд моя прога должна посылать GPS-координаты экипажа такси на сервер. Ну хотя я вообще еще не очень сильно представляю жизненный цикл приложения на Android. Точно знаю, что он СОВЕРШЕННО не такой, как скажем, у приложений Windows (например, активность, ушедшая на бэкграунд может быть в какой-то момент запросто выгружена). Надо будет это хорошо прояснить, например, что будет с приложением, если пользователь, скажем, переключится на звонок или захочет отправить кому-то SMS. |
Сообщ.
#6
,
|
|
|
Цитата Homez @ А смысл использовать AlertDialog, коли ему подпихивать свой ресурс? Уж тогда лучше прямо использовать Dialog. Так там можно стандартные кнопочки заюзать, будет иметь вид как системный. Цитата Homez @ Вот пример бы хорошо увидеть. Так а что там примерять то? 1) Создаёшь активити 2) В первой активити пишешь: Intent intent = new Intent(); intent.setClass(this, NewActivity.class); intent.putExtra(параметры); startActivity(intent); Цитата Homez @ Ну я сейчас остановиля на платформе 2.1. Повышать до 3 как-то не гут - наверно, много девайсов просто этим срежутся. Есть пакет совместимости http://developer.android.com/sdk/compatibility-library.html Добавлено Цитата Homez @ Гм, при запуске же отдельной деятельности ранее активная деятельность становится на паузу. Что будет при этом, например, с функционированием таймера? Это важно, так как каждые 10 секунд моя прога должна посылать GPS-координаты экипажа такси на сервер. Опа, уже бага у тебя! Всю такую функциональность надо выносить в сервис или AsyncTask. Иначе словишь ANR. Цитата Homez @ Надо будет это хорошо прояснить, например, что будет с приложением, если пользователь, скажем, переключится на звонок или захочет отправить кому-то SMS. OnPause как минимум |
Сообщ.
#7
,
|
|
|
Цитата Британский учёный @ Гм, при запуске же отдельной деятельности ранее активная деятельность становится на паузу. Что будет при этом, например, с функционированием таймера? Это важно, так как каждые 10 секунд моя прога должна посылать GPS-координаты экипажа такси на сервер. Опа, уже бага у тебя! Всю такую функциональность надо выносить в сервис или AsyncTask. Иначе словишь ANR. Ага... Но пока у меня ближайшая цель - набросать каркас приложения. В конечном продукте, конечно, таких багов быть не должно. А что такое ANR? Добавлено Цитата Британский учёный @ Так а что там примерять то? 1) Создаёшь активити 2) В первой активити пишешь: Intent intent = new Intent(); intent.setClass(this, NewActivity.class); intent.putExtra(параметры); startActivity(intent); Ну это я уже видел. Но между двумя деятельностями же может быть большое пересечение по данным - в моей программе. Вот потому и хотелось бы увидеть живой полноценный пример, где бы такое было, а не упрощенный, как скажем, просто открытие почтовой программы для отправки сообщения по определенному адресу. |
Сообщ.
#8
,
|
|
|
Лучше делать всё на отдельных активностях + фоновые процессы (под GPS и так далее).
Но тут надо активити рассматривать как отдельные приложения (так проще понять), а инфу между ними гонять в намерениях или передавать через локальную БД. В общем, сначала накидай прототип/ТЗ на функционал приложения, покажи сюда, а только потом лезь разрабатывать. |
Сообщ.
#9
,
|
|
|
Чем это лучше диалогов?
|
Сообщ.
#10
,
|
|
|
Точно ничем не хуже:
+ разворачивается в полный экран + стек активностей (кнопка назад работает) + весь интерфейс описывается в XML +++ можно распараллелить разработку приложения между разработчиками |
Сообщ.
#11
,
|
|
|
Цитата RaD @ + весь интерфейс описывается в XML Ну и диалог можно описать в XML. Цитата RaD @ + стек активностей (кнопка назад работает) А вот этого как бы и не надо, хотелось бы, чтобы все дополнительные формы были модальные. Добавлено То есть хотелось бы, скажем, из диалога настроек возвращаться на главную форму только по нажатии кнопки OK или Отмена. |
Сообщ.
#12
,
|
|
|
Цитата Homez @ А что такое ANR? http://developer.android.com/guide/practic...onsiveness.html Цитата Homez @ Но между двумя деятельностями же может быть большое пересечение по данным - в моей программе. Та сколько угодно. Просто передаёшь параметры через интент, а потом в новой активити перед выходом делаешь setResult() |
Сообщ.
#13
,
|
|
|
А, ясно, посмотрел, что из деятельности можно вернуть такой же интент. Хорошо, а как сделать, чтобы дополнительная деятельность была именно модальной, то есть, нельзя бы было из нее вернуться в основную каким-нибудь другим способом, кроме как нажав кнопку вроде OK или Отмена?
|
Сообщ.
#14
,
|
|
|
Можно обрабатывать кнопку "Back", на я бы за такое убивал.
|
Сообщ.
#15
,
|
|
|
И что, иначе никак?
|
Сообщ.
#16
,
|
|
|
Цитата Homez @ что из деятельности OMG! Активити это, а не деятельность! Цитата Homez @ Хорошо, а как сделать, чтобы дополнительная деятельность была именно модальной, то есть, нельзя бы было из нее вернуться в основную каким-нибудь другим способом, кроме как нажав кнопку вроде OK или Отмена? Ну вот и юзай алерт билдер Или кнопка back |
Сообщ.
#17
,
|
|
|
В чем смысл модальности? Ну вернулся пользователь на предыдущий экран, считаем нажал отмену. Это, по крайней мере, логично.
|
Сообщ.
#18
,
|
|
|
Цитата Британский учёный @ OMG! Активити это, а не деятельность! В книге, которой я иногда пользуюсь, Шаповалова, эта штука называется деятельностью, и это все-таки русское слово, я предпочитаю пользоваться русскоязычными терминами. Скрытый текст Например, ненавижу, когда потоки в Windows-приложении называют тредами. Цитата Британский учёный @ Ну вот и юзай алерт билдер Хорошо, а как тогда ращвернуть диалог на весь экран? Собственно, уже долго мне хотелось бы это услышать. Цитата Британский учёный @ Или кнопка back Вы имеете ввиду - запрещать действие по кнопке back? Добавлено Ага, RaD, может, Вы и правы. Как-то я об этом не подумал:) |
Сообщ.
#19
,
|
|
|
Цитата Homez @ я предпочитаю пользоваться русскоязычными терминами. Только тебя никто не поймёт. Цитата Homez @ Хорошо, а как тогда ращвернуть диалог на весь экран? Собственно, уже долго мне хотелось бы это услышать. На весь не получится, ибо это таки диалог, но развернуть можно: http://stackoverflow.com/questions/2306503...-of-screen-size Цитата Homez @ Вы имеете ввиду - запрещать действие по кнопке back? Да. |
Сообщ.
#20
,
|
|
|
Ну только как тогда отлавливать возврат к главной Activity по кнопке back, чтобы уничтожать дополнительную или что-то там еще нужное делать, что делалось, если бы пользователь нажал кнопку Отмена?
|
Сообщ.
#21
,
|
|
|
Цитата Homez @ Ну только как тогда отлавливать возврат к главной Activity по кнопке back, чтобы уничтожать дополнительную или что-то там еще нужное делать, что делалось, если бы пользователь нажал кнопку Отмена? Короче, делай 2 активити, и лови результат, всё. |
Сообщ.
#22
,
|
|
|
Британский учёный, RaD, спасибо за советы, пояснения, информацию! Сейчас наконец доделал Activity, в котором задается одна важная настройка программы, этот Activity вызывается из меню. Провозился долго, есть всякие нюансы, что-то я прошляпил, но в итоге сделал! А без Вашей помощи, даже не знаю, на какой бы я стадии сейчас был... Надеюсь, дальше пока будет легче - буду добавлять в программу другие настройки по подобию.
P.S. Добавленная только что настройка была пользовательским ключом к системе. Как только я убедился, что задал в сеансе работы правильное значение, вызываемый серверный скрипт стал возвращать OK, что говорит от том, что данные он благополучно принимает по этому ключу. |