Форум программистов, компьютерный форум CyberForum.ru

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

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 19, средняя оценка - 4.84
Tester64
395 / 356 / 43
Регистрация: 22.05.2013
Сообщений: 2,518
#1

Можно ли оформить AlertDialog в виде функции? - Программирование Android

22.05.2013, 05:22. Просмотров 2412. Ответов 33
Метки нет (Все метки)

Помогите новичку! С Делфи перехожу на Яву

Создал класс, внутри процедуру для диалога Да-Нет. Успешно вызывается, но...

Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
public static int res = 0;
 
...
        AlertDialog.Builder quitDialog = new AlertDialog.Builder(context);
        quitDialog.setTitle(TextTitle);
 
        res = 0;
        
        quitDialog.setPositiveButton(TextYes, new DialogInterface.OnClickListener() {
            @Override
            public void onClick(DialogInterface dialog, int which) {
                res = 1;
            }
        });
 
        quitDialog.setNegativeButton(TextNo, new DialogInterface.OnClickListener() {
            @Override
            public void onClick(DialogInterface dialog, int which) {
                res = 2;
            }
        });
 
        quitDialog.show();
        return res; 
...
Результат всегда 0

Где ошибка???
Хотелось бы использовать через
res = MyAsk("Уверены?", "Да","Нет")
if (res == 1) ...
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
22.05.2013, 05:22     Можно ли оформить AlertDialog в виде функции?
Посмотрите здесь:
Android Можно ли сделать так, чтобы AlertDialog не закрывался
AlertDialog Android
Android AlertDialog Error
Custom AlertDialog Android
Android AlertDialog и RadioGroup
Android Закрытие AlertDialog
Android Spinner в AlertDialog
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
V0v1k
1158 / 982 / 1
Регистрация: 28.06.2012
Сообщений: 3,462
22.05.2013, 18:53     Можно ли оформить AlertDialog в виде функции? #21
именно из-за использования одного потока это все происходит, вы работаете в UI потоке и задержка выполнение метода это зависание интерфейса, поэтому и нужно тяжелые операции выносить в отдельные потоки.
а в дэлфи(точнее в фреймворке а не в самом языке) судя по вашим словам в архитектуре встроено отделение вызываемых процедур в отдельный от UI поток. почитайте главу про потоки, а то видимо у вас складывается ложное впечатление.

Добавлено через 4 минуты
а если хотите чтобы было как в делфи, создавайте потоки и юзайте wait(), notify() как я уже писал выше.
Tester64
395 / 356 / 43
Регистрация: 22.05.2013
Сообщений: 2,518
22.05.2013, 19:36  [ТС]     Можно ли оформить AlertDialog в виде функции? #22
Цитата Сообщение от V0v1k Посмотреть сообщение
а если хотите чтобы было как в делфи, создавайте потоки и юзайте wait(), notify() как я уже писал выше.
Пробовал - полное зависание. Причем Wait потребовал завернуть в TRY скобки. И все-равно "глобальная ошибка"

именно из-за использования одного потока это все происходит, вы работаете в UI потоке и задержка выполнение метода это зависание интерфейса, поэтому и нужно тяжелые операции выносить в отдельные потоки.
а в дэлфи(точнее в фреймворке а не в самом языке) судя по вашим словам в архитектуре встроено отделение вызываемых процедур в отдельный от UI поток. почитайте главу про потоки, а то видимо у вас складывается ложное впечатление.
В виндосовских потоках неплохо разбираюсь (мютексы, семафоры, приоритеты, приостановки...). Насколько знаю в Линуксе та-же технология. А Андроид по той-же технологи склеен. Думаю отличий не много. Немного не так обьяснил про Делфи. Там каждое окно - это поток. Некоторые окна (вроде АПИ-шных диалогов ДА-НЕТ) сами останавливают текущий поток, дожидаются своих обработок и возвращают только результат в место прошлой остановки. У большинства окошек есть команда ShowModal (вместо Show), которая принудительно останавливает текущий поток для ожидания отклика от нового окна - вызывающее окно становится недоступным пока не закроется вызываемое. Думал что и в ява подобное...
V0v1k
1158 / 982 / 1
Регистрация: 28.06.2012
Сообщений: 3,462
22.05.2013, 20:24     Можно ли оформить AlertDialog в виде функции? #23
здесь дело не в языке, а в самой архитектуре андроида, весь UI в одном потоке, все методы которые вызываются UIем - в том же потоке, методы жизненного цикла активити - в этом же потоке.

Добавлено через 1 минуту
Цитата Сообщение от Tester64 Посмотреть сообщение
В виндосовских потоках неплохо разбираюсь (мютексы, семафоры, приоритеты, приостановки...). Насколько знаю в Линуксе та-же технология. А Андроид по той-же технологи склеен. Думаю отличий не много.
я думал wait() и notify() это первое с чего начинают изучение потоков, а у вас на них зависание)
Tester64
395 / 356 / 43
Регистрация: 22.05.2013
Сообщений: 2,518
22.05.2013, 20:42  [ТС]     Можно ли оформить AlertDialog в виде функции? #24
Цитата Сообщение от V0v1k Посмотреть сообщение
здесь дело не в языке, а в самой архитектуре андроида, весь UI в одном потоке, все методы которые вызываются UIем - в том же потоке, методы жизненного цикла активити - в этом же потоке.

я думал wait() и notify() это первое с чего начинают изучение потоков, а у вас на них зависание)
Начал вычитывать потоки на яве... немного непривычные методы создания потоков. В делфях я редко использовал wait() и notify(). Обычно хватало "запустить" и "убить поток". Реже взаимные блокировки через защищенные области или мютексы/семафоры для доступам к общим данным или вывода в графику.

Не до конца понимаю использование потоков в ГРАФИКЕ(диалогах) андроида. Похоже я глушил первичный поток до вывода диалога (хоть и после команды SHOW). А следовательно обработчики кнопок никогда не сработают.

Можно ли приостановить ТЕКУЩИЙ/ОСНОВНОЙ поток (UI) пока работает другой? Можно ли вызвать диалоговое окно (вопрос ДА-НЕТ) в отдельном потоке и обработчики нажатий на кнопки выполнить в нем-же? Как обрабатывается нажатие ВНЕ вопроса - диалог гаснет, а кнопки не нажаты? Не зависнет ли первый поток (забыли разблокировать)?
V0v1k
1158 / 982 / 1
Регистрация: 28.06.2012
Сообщений: 3,462
22.05.2013, 20:55     Можно ли оформить AlertDialog в виде функции? #25
Цитата Сообщение от Tester64 Посмотреть сообщение
Можно ли приостановить ТЕКУЩИЙ/ОСНОВНОЙ поток (UI) пока работает другой?
нет, основной(UI) поток никогда не нужно приостанавливать или даже нагружать длительными процессами.

Цитата Сообщение от Tester64 Посмотреть сообщение
Можно ли вызвать диалоговое окно (вопрос ДА-НЕТ) в отдельном потоке
как бы то понятнее объяснить, любые изменения юая можно делать только в UI потоке, но можно из другого потока вызвать выполнение определенного кода в UI потоке(Handler, View.post(), runOnUiThread(), AsyncTask)


Цитата Сообщение от Tester64 Посмотреть сообщение
и обработчики нажатий на кнопки выполнить в нем-же
изначально все процедуры(в java правильно говорить методы) которые вызывает UI выполняются в UI потоке, вы можете из них запустить отдельный поток, но нельзя задерживать их выполнение(зависание UIя)


Цитата Сообщение от Tester64 Посмотреть сообщение
Как обрабатывается нажатие ВНЕ вопроса - диалог гаснет, а кнопки не нажаты?
должен быть отдельный калбек для этого, нужно в документацию глянуть.


Цитата Сообщение от Tester64 Посмотреть сообщение
Не зависнет ли первый поток (забыли разблокировать)?
не понял этого вопроса.
Tester64
395 / 356 / 43
Регистрация: 22.05.2013
Сообщений: 2,518
22.05.2013, 21:41  [ТС]     Можно ли оформить AlertDialog в виде функции? #26
изначально все процедуры(в java правильно говорить методы) которые вызывает UI выполняются в UI потоке, вы можете из них запустить отдельный поток, но нельзя задерживать их выполнение(зависание UIя)
Тоесть как ни крути, а сделать функцию вызова чужого аска(кнопки, галочки, списки) со своими обработчиками в виде функции возвращающей код результата обработки пользователем НЕЛЬЗЯ! По любому прийдется РАЗРЫВАТЬ старую процедуру на ДО вызыва диалога и обработчики. Т.к. никак НЕЛЬЗЯ приостановить OnButton1Click, вызвать ЛЮБОЙ другой диалог и результат вернуть в ЭТУже обработку нажатия кнопки. Нельзя завесить UI.
Нельзя в момент работы OnButton1Click обработать нажатие ДА (бесконечный цикл тоже отпадает)...

Действительно ява - самый "гибкий язык", на котором можно сделать все...
V0v1k
1158 / 982 / 1
Регистрация: 28.06.2012
Сообщений: 3,462
22.05.2013, 21:49     Можно ли оформить AlertDialog в виде функции? #27
да, нельзя задерживать/останавливать UI поток, он отвечает за реакцию на действия пользователя и за обновление отображения на дисплеи. задержка UI потока это просто зависание интерфейса.

Добавлено через 1 минуту
и еще раз повторяю, дело не в языке(поток он и в африке поток), а в архитектуре андроида, в делфи все точно также просто фреймворк берет на себя эту работу с потоками(создает потоки, вызывает wait/notify), а в андроиде такого нет.
Tester64
395 / 356 / 43
Регистрация: 22.05.2013
Сообщений: 2,518
23.05.2013, 04:52  [ТС]     Можно ли оформить AlertDialog в виде функции? #28
Пожалуй понял... Спасибо за ответы. Буду вычитывать теорию для деталей, но суть понял...
Tester64
395 / 356 / 43
Регистрация: 22.05.2013
Сообщений: 2,518
25.05.2013, 10:19  [ТС]     Можно ли оформить AlertDialog в виде функции? #29
У меня последний (пока чисто-теоретический) вопрос: Если бы я писал свои проекты на VC++, я бы смог создать такую функцию? Там (вроде) не используются колбеки так часто. Имеет ли переходить на Си? Все ли (из того что может на андроид под ява) можно написать на VC++?? Слышал что Си более продвинут и используется для использования "хакерских" возможностей (нижний уровень апи). А как он относится к обычным формам?
V0v1k
1158 / 982 / 1
Регистрация: 28.06.2012
Сообщений: 3,462
25.05.2013, 11:59     Можно ли оформить AlertDialog в виде функции? #30
ну, во первых не VC++, а просто С/С++.
я не имею опыта написания под андроид на С/С++, но не думаю что там с потоками как-то по-другому.
Tester64
395 / 356 / 43
Регистрация: 22.05.2013
Сообщений: 2,518
25.05.2013, 22:17  [ТС]     Можно ли оформить AlertDialog в виде функции? #31
Цитата Сообщение от V0v1k Посмотреть сообщение
я не имею опыта написания под андроид на С/С++, но не думаю что там с потоками как-то по-другому.
Я имею в виду не потоки (подзреваю так-же), а необходимость плодить колбеки вместо функций. Что-бы диалоговое окно "ДА+НЕТ" ПОДВЕШИВАЛО основной поток пока не ответит пользователь.
V0v1k
1158 / 982 / 1
Регистрация: 28.06.2012
Сообщений: 3,462
25.05.2013, 22:36     Можно ли оформить AlertDialog в виде функции? #32
здесь от языка не зависит, задерживаете UI поток - получаете зависание интерфейс.
Tester64
395 / 356 / 43
Регистрация: 22.05.2013
Сообщений: 2,518
26.05.2013, 01:55  [ТС]     Можно ли оформить AlertDialog в виде функции? #33
Мне просто не нравится (СИЛЬНО) технология колбеков от которых нельзя избавиться. И тот факт что вся графика (все окна одновременно) находятся в одном потоке. Нельзя как в Win "заморозить" одно окно пока не закроется другое не нарезая процедуру до показа окна и после на "колбеки/реакции". Нажал "покажи меню", дождись кнопки и "ветвИ" логику превращается в десяток независимых путанных процедур. Захотел показать ползунок в процессе работы - дождись окончания процедуры или выводи ее в параллельный поток с блокировкой всех кнопок. Захотел вывести "отладочный" лог на экран - только после окончания полной обработки или в поток. А если кнопок больше 10, а если они плодятся как кролики и проконтролировать их блокировку это работа на целую процедуру в несколько страниц кода с полным перебором кнопок. Раньше часто подобным пользовался в нескольких языках (делфи, 1С). И даже если перепишу свою реализацию окон(например 3 "оконных" прямоугольника с кнопками на картинке), то не особо представляю как это упростить. Офисным программам обычно такая сложность (колбеки) не нужна(даже вредит). Часто требуется быстро модифицировать одну большую ("базовую") процедуру обработки.

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

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

Подскажите (или дайте ссылки на статьи), чем отличается кодинг под андроид на си++ от явы? Преимущества, недостатки... Не сложность языка или инструментария, а ограничения конструкций и доступы к API. Раньше знаю ява был базовым и на си можно было делать лишь пару функций, но теперь вроде (после NDK) функционал С++ сравнялся или даже превзошел. Так ли это?
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
26.05.2013, 03:12     Можно ли оформить AlertDialog в виде функции?
Еще ссылки по теме:
Потоки и AlertDialog Android
Android Не показывается AlertDialog
Android TextView а AlertDialog
Не работает AlertDialog Android
Android Создание AlertDialog со списком

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

Или воспользуйтесь поиском по форуму:
V0v1k
1158 / 982 / 1
Регистрация: 28.06.2012
Сообщений: 3,462
26.05.2013, 03:12     Можно ли оформить AlertDialog в виде функции? #34
первые три абзаца не понял
а по поводу 4-го, думаю что единственно ради чего используется С++ в андроиде это быстродействие...

Добавлено через 33 минуты
http://developer.android.com/tools/sdk/ndk/index.html
Yandex
Объявления
26.05.2013, 03:12     Можно ли оформить AlertDialog в виде функции?
Ответ Создать тему
Опции темы

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