Форум программистов, компьютерный форум, киберфорум
Программирование Android
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.57/21: Рейтинг темы: голосов - 21, средняя оценка - 4.57
420 / 357 / 47
Регистрация: 22.05.2013
Сообщений: 2,518
1

Можно ли оформить AlertDialog в виде функции?

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

Author24 — интернет-сервис помощи студентам
Помогите новичку! С Делфи перехожу на Яву

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

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) ...
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
22.05.2013, 05:22
Ответы с готовыми решениями:

Вычисления суммы ряда оформить в виде функций, используемые функции и процедуры оформить в виде модуля
Напишите программу полностью, очень прошу! Вычисления оформить в виде функции, используемые функции...

Нахождение min оформить в виде функции, а вычисление и введение ai, bi, ci-в виде процедур
Заданные действительные числа a1, a2, a3; b1, b2, b3; c1, с2, с3. если ...

Оформить отсортированный массив в виде процедуры, а сумму отрицательных чисел - в виде функции
Помогите пожалуйста оформить отсортированный массив, в виде процедуры, а сумму отрицательных чисел...

Вычислить m значений функции f(x) на отрезке [a, b]. Вычисление величины f(x) оформить в виде функции
Составить программу решения поставленной задачи: Вычислить m значений функции f(x) на отрезке ....

33
34 / 34 / 2
Регистрация: 22.08.2010
Сообщений: 271
22.05.2013, 10:12 2
А если static убрать?
0
1162 / 986 / 1
Регистрация: 28.06.2012
Сообщений: 3,462
22.05.2013, 11:40 3
Цитата Сообщение от Tester64 Посмотреть сообщение
Результат всегда 0
потому что функция возвращает результат прежде чем вы нажмете да/нет.
0
420 / 357 / 47
Регистрация: 22.05.2013
Сообщений: 2,518
22.05.2013, 11:52  [ТС] 4
>> потому что функция возвращает результат прежде чем вы нажмете да/нет
Это я понял, но как это обойти?
Как приостановить отправку RETURN до погашения формы?

Java
1
2
3
quitDialog.show();
// что-то вставить между ними???
return res;
>> А если static убрать?
Тогда не могу устанавливать значение res = 1; res = 2; Говорит "ошибка - неизвестная RES".
0
1162 / 986 / 1
Регистрация: 28.06.2012
Сообщений: 3,462
22.05.2013, 11:59 5
Цитата Сообщение от Tester64 Посмотреть сообщение
Как приостановить отправку RETURN до погашения формы?
не нужно этого делать, просто выполняйте все необходимые действия в методах onClick.
0
420 / 357 / 47
Регистрация: 22.05.2013
Сообщений: 2,518
22.05.2013, 12:34  [ТС] 6
не нужно этого делать, просто выполняйте все необходимые действия в методах onClick.
Ну очень хочется не вставлять каждый раз 20 строк для создани и обработки класического "Да/Нет", а вызвать одну функцию. И написать только (чаще всего) обработку на "Да":
Java
1
2
3
4
res = MyAsk("Уверены?", "Да","Нет");
if (res == 1) {
...
}
Добавлено через 9 минут
Пробовал поставить цикл

Java
1
2
3
4
quitDialog.show();
visible = 1;
while (visible == 1) ;
return res; //
Где visible =0; в обработчиках кнопок. Но получаю полное зависание и даже диалог не вызывается... Не показывается на экран.

Раньше работал в Делфи - там все шло в один поток, графика и логика. И если я говорил показать форму, то она показывалась СРАЗУ, а не дожидалась окончания обработки. В яве все непривычно... Есть текствьюв, на который добавляю строки в процессе работы. Обработка длится секунд 30. Пока не закончится обработка, вьюв почему-то не обновляется и остается пустым.
0
1162 / 986 / 1
Регистрация: 28.06.2012
Сообщений: 3,462
22.05.2013, 13:08 7
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
quitDialog.setPositiveButton(TextYes, new DialogInterface.OnClickListener() {
            @Override
            public void onClick(DialogInterface dialog, int which) {
                clickedYes();
            }
        });
 
        quitDialog.setNegativeButton(TextNo, new DialogInterface.OnClickListener() {
            @Override
            public void onClick(DialogInterface dialog, int which) {
                clickedNo();
            }
        });
в чем проблема?

Добавлено через 4 минуты
или
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
26
27
public void showYesNoDialog(DialogInterface.OnClickListener yesCallback, DialogInterface.OnClickListener noCallback){
AlertDialog.Builder quitDialog = new AlertDialog.Builder(context);
        quitDialog.setTitle(TextTitle);
        
        quitDialog.setPositiveButton(TextYes, yesCallback);
 
        quitDialog.setNegativeButton(TextNo, noCallback);
 
        quitDialog.show();
 
}
 
...
showYesNoDialog(
new DialogInterface.OnClickListener() {
            @Override
            public void onClick(DialogInterface dialog, int which) {
               //обрабатываем ответ да
            }
        },
 
new DialogInterface.OnClickListener() {
            @Override
            public void onClick(DialogInterface dialog, int which) {
               //обрабатываем ответ нет
            }
        });

Добавлено через 28 секунд
Цитата Сообщение от Tester64 Посмотреть сообщение
сть текствьюв, на который добавляю строки в процессе работы. Обработка длится секунд 30. Пока не закончится обработка, вьюв почему-то не обновляется и остается пустым.
выносите обработку в отдельный поток.
0
420 / 357 / 47
Регистрация: 22.05.2013
Сообщений: 2,518
22.05.2013, 13:11  [ТС] 8
Цитата Сообщение от V0v1k Посмотреть сообщение
в чем проблема?
Не понял... Мне хочется результатом функции получить 1 на Да, 2 на Нет, 0 на ничего не нажато (рядом с вопросом что вызвало закрытие). Как это получить из Вашего кода? Мне не хочется плодить лишних функций -реакций на Да и Нет. Просто вызываю функцию, она останавливает ход работы кода пока не получит отклик от пользователя. Обрабатывает отклик и меняет ход работы в зависимости от ответа. Можно применить для тестов/опросников.
Например:
Java
1
2
3
4
5
6
res1 = AskYesNo("Вы высокий?", "Да", "Нет");
res2 = AskYesNo("Вы толстый?", "Да", "Нет");
res3 = AskYesNo("Вы курите?", "Да", "Нет");
...
res40 = AskYesNo("Вы умеете летать?", "Да", "Нет");
If (res1+res2+res3>2) {...}
пришлось бы МНОГО обработчиков нажатий плодить...

А можно воткнуть на выход из программы
Такая функция есть в API Windows и я к ней привык.
0
1162 / 986 / 1
Регистрация: 28.06.2012
Сообщений: 3,462
22.05.2013, 13:12 9
Цитата Сообщение от Tester64 Посмотреть сообщение
- там все шло в один поток, графика и логика. И если я говорил показать форму, то она показывалась СРАЗУ, а не дожидалась окончания обработки
ну так в любом случае да/нет нажмете ведь не сразу, return не опередите...
0
420 / 357 / 47
Регистрация: 22.05.2013
Сообщений: 2,518
22.05.2013, 13:15  [ТС] 10
Цитата Сообщение от V0v1k Посмотреть сообщение
выносите обработку в отдельный поток.
А как? И зачем?
Например код:
...
ToView("Сделали пункт 1");
...
ToView("Сделали пункт 2");
...
ToView("Сделали пункт 3");
...
но пока не закончим ВСЕ вьюв пустой. Потом сразу текста на несколько страниц.
0
1162 / 986 / 1
Регистрация: 28.06.2012
Сообщений: 3,462
22.05.2013, 13:17 11
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
showYesNoDialog("Вы высокий?",
new DialogInterface.OnClickListener() {
            @Override
            public void onClick(DialogInterface dialog, int which) {
               res1 = 1;
               showQuestionAboutWeight();
            }
        },
 
new DialogInterface.OnClickListener() {
            @Override
            public void onClick(DialogInterface dialog, int which) {
               res1 = 2;
               showQuestionAboutWeight();
            }
        });
0
420 / 357 / 47
Регистрация: 22.05.2013
Сообщений: 2,518
22.05.2013, 13:18  [ТС] 12
Цитата Сообщение от V0v1k Посмотреть сообщение
ну так в любом случае да/нет нажмете ведь не сразу, return не опередите...
Я готов остановить работу, повесить програму пока не дождусь ответа... Ведь если я вывел вопрос, значит он мне реально важен. По крайней мере в однопоточных не графических приложениях
0
1162 / 986 / 1
Регистрация: 28.06.2012
Сообщений: 3,462
22.05.2013, 13:27 13
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
public void showQuestionAboutWeight() {
showYesNoDialog("Вы толстый?",
         new DialogInterface.OnClickListener() {
            @Override
            public void onClick(DialogInterface dialog, int which) {
               res2 = 1;
               showQuestionAboutSmoking();
            }
        },
 
new DialogInterface.OnClickListener() {
            @Override
            public void onClick(DialogInterface dialog, int which) {
               res2 = 2;
               showQuestionAboutSmoking();
            }
        });
}
Добавлено через 1 минуту
Цитата Сообщение от Tester64 Посмотреть сообщение
Я готов остановить работу, повесить програму пока не дождусь ответа... Ведь если я вывел вопрос, значит он мне реально важен. По крайней мере в однопоточных не графических приложениях
вы можете делать вызов с отдельного потока который будете останавливать методом wait(), а после ответа запускать методом notifyAll(), но как-то это не по ООПшному

Добавлено через 2 минуты
Цитата Сообщение от Tester64 Посмотреть сообщение
А как? И зачем?
Например код:
...
ToView("Сделали пункт 1");
...
ToView("Сделали пункт 2");
...
ToView("Сделали пункт 3");
...
но пока не закончим ВСЕ вьюв пустой. Потом сразу текста на несколько страниц.
для этого есть AsyncTask, или просто потоки..

советую прочитать уроки по андроиду или книгу.

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

Добавлено через 1 минуту
Прочитайте книжку про ООП, сейчас вы пытаетесь все сделать в процедурном стиле.
0
420 / 357 / 47
Регистрация: 22.05.2013
Сообщений: 2,518
22.05.2013, 13:32  [ТС] 14
Цитата Сообщение от V0v1k Посмотреть сообщение
[JAVA]showQuestionAboutWeight()
Тоесть при 400 вопросах я должен вместо 400 строк плодить 400 функций с 800 обработчиками..

Цитата Сообщение от V0v1k Посмотреть сообщение
вы можете делать вызов с отдельного потока который будете останавливать методом wait(), а после ответа запускать методом notifyAll(), но как-то это не по ООПшному
А вот здесь по подробнее пожалуста... По делфям понимаю что близко, но java выдает на wait() ошибки:

Cannot make a static reference to the non-static method wait() from the type Object Askers.java
0
1162 / 986 / 1
Регистрация: 28.06.2012
Сообщений: 3,462
22.05.2013, 13:32 15
и я бы предпочел форму с радиобатонами вместо десятка диалогов...
0
420 / 357 / 47
Регистрация: 22.05.2013
Сообщений: 2,518
22.05.2013, 13:44  [ТС] 16
Прочитайте книжку про ООП, сейчас вы пытаетесь все сделать в процедурном стиле
Какие ГЛАВЫ читать в книжках (вычитывать 400-600 листов ради одной процедурки...)
Вообще-то я думал что у меня одна процедура "провести тест" или "выходим из программы". Вызывается на нажатие кнопки и длится до обработки всех ответов пользователей. "вы уверены что выходим?" "Документ не сохранен, сохранить?".

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

Добавлено через 3 минуты
Цитата Сообщение от V0v1k Посмотреть сообщение
и я бы предпочел форму с радиобатонами вместо десятка диалогов...
Иногда следующий вопрос зависит от предыдущего:
Вы мужчина?
Паять умеете? / Какой у вас размер лифчика?
0
1162 / 986 / 1
Регистрация: 28.06.2012
Сообщений: 3,462
22.05.2013, 14:16 17
Цитата Сообщение от Tester64 Посмотреть сообщение
Тоесть при 400 вопросах я должен вместо 400 строк плодить 400 функций с 800 обработчиками..
нет, 400 диалогов это в любом случае плохо, как я уже написал, лучше формы с радиобатонами.
с диалогами в ООПшном стиле может выглядеть примерно так:
Java
1
2
3
4
5
Dialog d400 = new QuestionDialog("Вопрос", null);
Dialog d399 = new QuestionDialog("Вопрос", d400);
...
Dialog d1 = new QuestionDialog("Вопрос", d2);
d1.show();
или так
Java
1
2
3
4
questionQueue.add(new QuestionDialog("Вопрос"));
questionQueue.add(new QuestionDialog("Вопрос2"));
questionQueue.add(new QuestionDialog("Вопрос3"));
questionQueue.start();
Добавлено через 1 минуту
Цитата Сообщение от Tester64 Посмотреть сообщение
Иногда следующий вопрос зависит от предыдущего
нет проблем, можно динамически добавлять такие вопросы, или отделить в первую форму вопросы от которых зависят другие вопросы.

Добавлено через 4 минуты
Цитата Сообщение от Tester64 Посмотреть сообщение
Cannot make a static reference to the non-static method wait() from the type Object Askers.java
а где это вы пытаетесь вызвать?

Добавлено через 56 секунд
нельзя в статик методах вызывать не статические методы этого же класса.

Добавлено через 7 минут
Цитата Сообщение от Tester64 Посмотреть сообщение
А вот здесь по подробнее пожалуста...
ну примерно так
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
class QuestionThread extends Thread{
        private Object mLock = new Object();
        @Override
        public void run() {
            QuestionDialog d1 = new QuestionDialog("Вопрос");
            d1.show();
            mLock.wait();
                        String result = d1.getResult();
        }
        
        public void next(){
            mLock.notifyAll();
        }
    }
    ....
    @Override
    public void onClick(DialogInterface dialog, int which) {
                result = 1;
        questionThread.next();
    }
диалоги можно в цикле создавать и вызывать и свести код к минимуму, все от твоей фантазии зависит...

Добавлено через 2 минуты
Цитата Сообщение от Tester64 Посмотреть сообщение
Какие ГЛАВЫ читать в книжках (вычитывать 400-600 листов ради одной процедурки...)
ну чтобы перестроить свое мышление с процедур на объекты одной главы недостаточно.

Добавлено через 9 минут
все же советую отказаться от вывода сотен диалогов и продумать нормальную форму для заполнения...

Добавлено через 36 секунд
дурной тон такое диалогами делать.
0
420 / 357 / 47
Регистрация: 22.05.2013
Сообщений: 2,518
22.05.2013, 16:54  [ТС] 18
ну чтобы перестроить свое мышление с процедур на объекты одной главы недостаточно.
От многолетнего опыта Делфи тяжело отказаться - привычка работать компонентами. Коллекционировать "идеально отлаженые" процедуры/функции. Проще потратить день на написание класса и потом использовать одну строку/функцию вместо страницы кода. Например вывод простого Тоста вывел в public static int AskInfo(Context context, String TestInfo, int shot)
вызывается как Askers.AskInfo(this, "ура", 1) ; И в теории поменяв/доработав процедуру смогу сменить его стиль хоть на свой дизайн (цвета, прозрачность, рамка). Программу же перебирать не прийдется...

Посоветуйте все-же какие Главы Явы помогут мне понять принцип построение андроид-ява-обработчиков.

все же советую отказаться от вывода сотен диалогов и продумать нормальную форму для заполнения...
Пока тесты делать не планирую. Просто пример очень удачный был. Скорее в программе десяток разных мест, "опасных для пользователя", когда стоит вывести предупреждения "вы уверены?" "сохранить?" "обновить?" "перегрузить?". Каждый раз определять переменные, подключать классы, писать обработчики, учитывать последовательность обработки... Или одна строчка "уверены - нет - выход из процедуры"
0
1162 / 986 / 1
Регистрация: 28.06.2012
Сообщений: 3,462
22.05.2013, 17:42 19
Цитата Сообщение от Tester64 Посмотреть сообщение
"уверены - нет - выход из процедуры"
вот от этого нужно отказаться, выполнение кода не должно ждать ответа пользователя, все реализуется калбеками/ивентами.
1
420 / 357 / 47
Регистрация: 22.05.2013
Сообщений: 2,518
22.05.2013, 18:24  [ТС] 20
Цитата Сообщение от V0v1k Посмотреть сообщение
вот от этого нужно отказаться, выполнение кода не должно ждать ответа пользователя, все реализуется калбеками/ивентами.
Тяжелая "ломка" логики. Если честно, не вижу преимущества такого подхода. Мелкие модификации превращаются в полное переписывание логики. Например была длинная процедура синхронизации гаджета с сервером (реальная ситуация). В середине обработки решил спросить пользователя, хочет ли он (например) после получения данных отправить свои. И... вынужден "нарезать" процедуру Sinhro на 3 - до вопроса(с обрезанием всего что было раньше), ДА и НЕТ вместо IF ELSE. А если захочется вставить еще несколько вопросов, то вместо "ветвей IF" получаю 5-8 разных "вложеных калбеков". А синхронизацию некоторых явно прийдется вести через "потоки" и "мютексы". Круто для многоядерных андроидов, но абсолютно бесполезно для "офисных" приложений.

Слышал что ява намного гибче Делфи. Подделать ява-вские калбеки/инвайты в делфи легко. А можно ли подделать однопоточную Делфи в Ява?
0
22.05.2013, 18:24
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
22.05.2013, 18:24
Помогаю со студенческими работами здесь

Оформить вычисления значения интегральной функции в виде процедуры-функции
Оформить вычисления значения интегральной функции F (x), в виде процедуры-функции используя...

Оформить в виде функции
Подскажите, как оформить в виде функции код работы с Edit? Например такой: case Key of ...

Оформить в виде функции
Добрый вечер, нужно оформить программу в виде функции. Вроде все правильно сделал. но не могу...

Оформить в виде функции
Помогите пожалуйста, вот задание: Оформить каждый пункт задания в виде функции. Все необходимые...


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru