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

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

Войти
Регистрация
Восстановить пароль
 
Slon747
59 / 37 / 1
Регистрация: 24.08.2013
Сообщений: 415
#1

Модальное окно - Android

20.01.2016, 12:11. Просмотров 447. Ответов 13
Метки нет (Все метки)

Скажите, неужели невозможно добиться того, чтобы при запуске диалогового окна (или похожего на диалоговое), далее код не выполнялся, пока это окно не будет закрыто?
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
androbro
318 / 278 / 54
Регистрация: 17.10.2014
Сообщений: 825
20.01.2016, 12:13     Модальное окно #2
Цитата Сообщение от Slon747 Посмотреть сообщение
Скажите, неужели невозможно добиться того, чтобы при запуске диалогового окна (или похожего на диалоговое), далее код не выполнялся, пока это окно не будет закрыто?
как то давно тоже нужна была такая фича, но поиск выдал только какие то жесткие костыли) стандартными средствами вроде никак.
в общем отказался от такой задумки))
Паблито
20.01.2016, 12:25
  #3

Не по теме:

код надо выстроить так что бы вызывалось диалоговое окно, а на dismiss повесить слушатель, в котором будет вызываться нужный метод (это ведь ООП)

Slon747
59 / 37 / 1
Регистрация: 24.08.2013
Сообщений: 415
20.01.2016, 12:34  [ТС]     Модальное окно #4
Цитата Сообщение от Паблито Посмотреть сообщение
код надо выстроить так что бы вызывалось диалоговое окно, а на dismiss повесить слушатель, в котором будет вызываться нужный метод (это ведь ООП)
Не понял. Пример можно?
Паблито
резкий
1958 / 1693 / 525
Регистрация: 12.05.2014
Сообщений: 6,038
Завершенные тесты: 1
20.01.2016, 12:44     Модальное окно #5
слишком абстрактный вопрос
Kadagor
12 / 12 / 4
Регистрация: 17.09.2015
Сообщений: 47
20.01.2016, 18:41     Модальное окно #6
Можно установить Cancelable в false и вызывать нужную функцию по нажатию кнопок
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
AlertDialog.Builder builder = new AlertDialog.Builder(activity);
builder.setTitle("Окно")
    .setMessage("Текст")
    .setCancelable(false)
    .setPositiveButton(R.string.ok, new DialogInterface.OnClickListener() { // Кнопка ОК
        @Override
        public void onClick(DialogInterface dialog, int which) {
            //указываем функцию
        }
    })
    .setNegativeButton(R.string.cansel, new DialogInterface.OnClickListener() { 
        @Override
        public void onClick(DialogInterface dialog, int which) {
            //указываем функцию
        }
    });
AlertDialog dilog = builder.create();
Или так:
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
AlertDialog.Builder builder = new AlertDialog.Builder(activity);
builder.setTitle("Окно")
    .setMessage("Текст")
    .setCancelable(true)
    .setPositiveButton(R.string.ok, new DialogInterface.OnClickListener() { // Кнопка ОК
        @Override
        public void onClick(DialogInterface dialog, int which) {
            //указываем функцию
        }
    })
    .setNegativeButton(R.string.cansel, new DialogInterface.OnClickListener() { 
        @Override
        public void onClick(DialogInterface dialog, int which) {
            //указываем функцию
        }
    })
    .setOnDismissListener(new DialogInterface.OnDismissListener() {
        @Override
        public void onDismiss(DialogInterface dialog) {
            //указываем функцию
        }
    });
AlertDialog dilog = builder.create();
Slon747
59 / 37 / 1
Регистрация: 24.08.2013
Сообщений: 415
21.01.2016, 09:03  [ТС]     Модальное окно #7
Вопрос то был в том, чтобы после строки
Java
1
my_fragment.show()
не выполнялся остальной код, пока не закрыто это окно.
Spelcrawler
522 / 492 / 110
Регистрация: 12.03.2014
Сообщений: 1,643
Завершенные тесты: 1
21.01.2016, 10:29     Модальное окно #8
Цитата Сообщение от Slon747 Посмотреть сообщение
не выполнялся остальной код, пока не закрыто это окно.
Зачем это вообще нужно? Не пишите после этой строки код вообще, а вынесете его в onDissmiss диалога.
Slon747
59 / 37 / 1
Регистрация: 24.08.2013
Сообщений: 415
21.01.2016, 11:00  [ТС]     Модальное окно #9
Цитата Сообщение от Spelcrawler Посмотреть сообщение
Зачем это вообще нужно? Не пишите после этой строки код вообще, а вынесете его в onDissmiss диалога.
У меня один и тот же далогог "Да/Нет" используется для разных логик.
Хочется сделать один диалог и использовать его по любому поводу в любой активити.
Spelcrawler
522 / 492 / 110
Регистрация: 12.03.2014
Сообщений: 1,643
Завершенные тесты: 1
21.01.2016, 11:01     Модальное окно #10
Slon747, в чем проблема то? Можно в каждой активити вешать на этот же диалог onDismissListener.
Slon747
59 / 37 / 1
Регистрация: 24.08.2013
Сообщений: 415
21.01.2016, 15:03  [ТС]     Модальное окно #11
Цитата Сообщение от Spelcrawler Посмотреть сообщение
в чем проблема то? Можно в каждой активити вешать на этот же диалог onDismissListener.
А что это изменить?
Всё равно код будет разбросан по активити.
В одном месте я спрашиваю подтверждение, а в другом (в переопределенном onDismissListener) выполняю действия. Да еще всё также придется перед выполнением анализировать, что же именно я спрашивал у пользователя.
Spelcrawler
522 / 492 / 110
Регистрация: 12.03.2014
Сообщений: 1,643
Завершенные тесты: 1
21.01.2016, 15:09     Модальное окно #12
Цитата Сообщение от Slon747 Посмотреть сообщение
А что это изменить?
Да все вообще. Если уж охота писать в одном месте можно даже и так
Java
1
2
3
4
5
6
7
8
9
10
//Берем свой диалог, который везде используется
//Ну и вешаем на него листенер
dialog.setOnDismissListener(new DialogInterface.OnDismissListener() {
        @Override
        public void onDismiss(DialogInterface dialog) {
            //Тут все что нужно после закрытия диалога
        }
    });
//Показываем диалог
dialog.show();
Паблито
резкий
1958 / 1693 / 525
Регистрация: 12.05.2014
Сообщений: 6,038
Завершенные тесты: 1
21.01.2016, 15:18     Модальное окно #13
мысль пришла что можно в свой диалог передавать Runnable объект, который в дисмис слушателе запускать на выполнение
тогда будет один универсальный диалог на все приложение
х.з. как там этот паттерн называется, стратегия что ли
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
21.01.2016, 16:47     Модальное окно
Еще ссылки по теме:

IntelliJ IDEA. Окно Logcat Android
Пропустить касание через окно Android
Android Всплывающее окно с GoogleMaps
Добавить кнопку на стандартное окно Android
Android Перезапустить окно выбора лаунчера

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

Или воспользуйтесь поиском по форуму:
Slon747
59 / 37 / 1
Регистрация: 24.08.2013
Сообщений: 415
21.01.2016, 16:47  [ТС]     Модальное окно #14
Цитата Сообщение от Spelcrawler Посмотреть сообщение
Да все вообще. Если уж охота писать в одном месте можно даже и так
Спасибо за подсказку.
Но вот что я делаю. Создал класс для диалога:

Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
public class YesNoDialog extends android.app.DialogFragment implements OnClickListener {
 
 
    @Override
    public Dialog onCreateDialog(Bundle savedInstanceState) {
 
        form = getActivity().getLayoutInflater().inflate(R.layout.yes_no, null);
        AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());
 
        Dialog dialog = super.onCreateDialog(savedInstanceState);
        dialog.getWindow().requestFeature(Window.FEATURE_NO_TITLE);
 
        return builder.setTitle("").setView(form)
                .setPositiveButton(android.R.string.ok, this)
                .setNegativeButton(android.R.string.cancel, null).create();
    }
 
    @Override
    public void onClick(DialogInterface dialogInterface, int i) {
 
    }
Далее вызываю этот диалог из главной активити:
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
YesNoDialog dialog_yesno = new YesNoDialog();
Bundle args = new Bundle();
args.putString("question", "Закрыть карту?");
dialog_yesno.setArguments(args);
 
//тут подчеркивает красным setOnDismissListener.
dialog_yesno.setOnDismissListener(new DialogInterface.OnDismissListener() {
@Override
public void onDismiss(DialogInterface dialog) {
    //Тут все что нужно после закрытия диалога
        }
    });
 
dialog_yesno.show(getFragmentManager(), "");
Подчеркивает красным setOnDismissListener.
Тогда я в класс YesNoDialog.java добавляю setter:

Java
1
2
3
public void setOnDismissListener(DialogInterface.OnDismissListener onDismissListener) {
    this.onDismissListener = onDismissListener;
}
В итоге событие выбора кнопки не перехватывается в onDismiss(DialogInterface dialog)
Yandex
Объявления
21.01.2016, 16:47     Модальное окно
Ответ Создать тему
Опции темы

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