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

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

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

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

22.05.2013, 05:22. Просмотров 2484. Ответов 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) ...
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
22.05.2013, 05:22
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Можно ли оформить AlertDialog в виде функции? (Программирование Android):

Можно ли сделать так, чтобы AlertDialog не закрывался - Программирование Android
Можно ли сделать так чтобы AlertDialog не закрывался если обнаруживается что пользователь ввел неверные данные?

AlertDialog - Программирование Android
ЗДравствуйте! Имеется простая игра. Когда ХП игрока == 0, я останавливаю игру и хочу показать AlerDialog. Рисуется все на канвас. Вот...

Custom AlertDialog - Программирование Android
Помогите люди добрые, что то никак не нагуглю... А желательно кодом;)

Потоки и AlertDialog - Программирование Android
Помогите, пожалуйста, бьюсь уже несколько дней. Создаю файловый менеджер. Это моя первая программа под Android, поэтому не всегда догоняю. ...

Не работает AlertDialog - Программирование Android
Почему в данном случае не работает AlertDialog? public class MainActivity : Activity { int count = 1; ...

Spinner в AlertDialog - Программирование Android
Как Spinner в AlertDialog сделать? AlertDialog вызываю через нажатие fab. AlertDialog.Builder builder = new...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
JIyrApy
32 / 32 / 1
Регистрация: 22.08.2010
Сообщений: 252
22.05.2013, 10:12 #2
А если static убрать?
0
V0v1k
1158 / 982 / 1
Регистрация: 28.06.2012
Сообщений: 3,462
22.05.2013, 11:40 #3
Цитата Сообщение от Tester64 Посмотреть сообщение
Результат всегда 0
потому что функция возвращает результат прежде чем вы нажмете да/нет.
0
Tester64
396 / 357 / 43
Регистрация: 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
V0v1k
1158 / 982 / 1
Регистрация: 28.06.2012
Сообщений: 3,462
22.05.2013, 11:59 #5
Цитата Сообщение от Tester64 Посмотреть сообщение
Как приостановить отправку RETURN до погашения формы?
не нужно этого делать, просто выполняйте все необходимые действия в методах onClick.
0
Tester64
396 / 357 / 43
Регистрация: 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
V0v1k
1158 / 982 / 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
Tester64
396 / 357 / 43
Регистрация: 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
V0v1k
1158 / 982 / 1
Регистрация: 28.06.2012
Сообщений: 3,462
22.05.2013, 13:12 #9
Цитата Сообщение от Tester64 Посмотреть сообщение
- там все шло в один поток, графика и логика. И если я говорил показать форму, то она показывалась СРАЗУ, а не дожидалась окончания обработки
ну так в любом случае да/нет нажмете ведь не сразу, return не опередите...
0
Tester64
396 / 357 / 43
Регистрация: 22.05.2013
Сообщений: 2,518
22.05.2013, 13:15  [ТС] #10
Цитата Сообщение от V0v1k Посмотреть сообщение
выносите обработку в отдельный поток.
А как? И зачем?
Например код:
...
ToView("Сделали пункт 1");
...
ToView("Сделали пункт 2");
...
ToView("Сделали пункт 3");
...
но пока не закончим ВСЕ вьюв пустой. Потом сразу текста на несколько страниц.
0
V0v1k
1158 / 982 / 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
Tester64
396 / 357 / 43
Регистрация: 22.05.2013
Сообщений: 2,518
22.05.2013, 13:18  [ТС] #12
Цитата Сообщение от V0v1k Посмотреть сообщение
ну так в любом случае да/нет нажмете ведь не сразу, return не опередите...
Я готов остановить работу, повесить програму пока не дождусь ответа... Ведь если я вывел вопрос, значит он мне реально важен. По крайней мере в однопоточных не графических приложениях
0
V0v1k
1158 / 982 / 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
Tester64
396 / 357 / 43
Регистрация: 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
V0v1k
1158 / 982 / 1
Регистрация: 28.06.2012
Сообщений: 3,462
22.05.2013, 13:32 #15
и я бы предпочел форму с радиобатонами вместо десятка диалогов...
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
22.05.2013, 13:32
Привет! Вот еще темы с ответами:

TextView а AlertDialog - Программирование Android
Здравствуйте! Вот столкнулся с такой проблемой, не могу Textview вывести в AlertDialog. Помогите пожалуйста!

Не показывается AlertDialog - Программирование Android
Хочу при запуске проверить есть ли на устройстве Сервисы Google Play public class MainActivity extends FragmentActivity { ...

AlertDialog и RadioGroup - Программирование Android
Всем привет. Создаю программу, в которой в открывшемся диалоговом окне происходит настройка сортировки списка. И там есть radiogroup,...

AlertDialog Error - Программирование Android
Всем доброго времени суток! Изучал изготовление своего AlertDialog по учебнику и на одном из сайтов, но увы столкнулся с проблемой, после...


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

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
22.05.2013, 13:32
Ответ Создать тему
Опции темы

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