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

Сделать паузу перед закрытием AlertDilaog - Android

Восстановить пароль Регистрация
 
Antohsa
8 / 12 / 0
Регистрация: 18.10.2016
Сообщений: 112
17.11.2016, 02:49     Сделать паузу перед закрытием AlertDilaog #1
Всем, Здравствуйте.

Задача простая. Выводится диалог "Скорость игры", там четыре скорости. Реализую с помощью AlertDialog с переключателями. Со списком мне не подходит, так как я не могу подсветить текущую скорость, если есть способ это сделать (не прибегая к встройки собственного view в диалог), то почти все решится .

В итоге делаю так:

Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
               
int choose=(int)(3 - speed_of_game/1000);
if (speed_of_game==100) choose = 3;
AlertDialog.Builder speed_dialog = new AlertDialog.Builder(this);
speed_dialog.setTitle(getString(R.string.speed_of_game))
     .setSingleChoiceItems(R.array.speed_of_game, choose, new DialogInterface.OnClickListener() {
          public void onClick(DialogInterface dialog, int item) {
                speed_of_game = (3 - item) * 1000;
                if (item == 4) speed_of_game = 100;
                 dialog.cancel();
              }
       });
speed_dialog.create();
speed_dialog.show();
Соответственно определяю текущую скорость, ставлю галку в нужном пункте. Далее в зависимости от выбора пользователя переопределяю скорость. Убрал, вернее не добавляю кнопок ОК и Cancel. Сразу же закрываю диалог. Кнопки мне не нужны.

Проблема: я не вижу, выбора... то есть диалог закрывается раньше, чем отрисовывается переключение в RadioGroup. Не понятно, произошел выбор или нет. На деле то, конечно произошел, но выглядит не убедительно. Пробовал dilalog.wait в разных вариантах перед закрытием, всегда одна ошибка, о том что объект не закрыт..... опять мои вечные проблемы с паузой в Андройде...

Вопрос 2:

Хотелось бы каждый раз не создавать диалог, а лишь показывать и скрывать... но перед показом мне нужно выставить текущую скрость... метода типа setCheckedItem не нашел... из-за этого каждый раз приходится создавать новый диалог. Да, в моей случае (приложение крайне простое) это мелочи, но все таки хочется сделать "красиво".

Заранее, спасибо.
Лучшие ответы (1)
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
OlegJV
 Аватар для OlegJV
98 / 98 / 29
Регистрация: 13.03.2016
Сообщений: 447
17.11.2016, 03:52     Сделать паузу перед закрытием AlertDilaog #2
Да сделай ты DialogFragment и не парься
vxg
Модератор
 Аватар для vxg
2667 / 1678 / 158
Регистрация: 13.01.2012
Сообщений: 6,276
17.11.2016, 09:17     Сделать паузу перед закрытием AlertDilaog #3
Antohsa, по нажатию пункта сделать постделай ранабла делающего кансел?
ExFau$t
55 / 55 / 4
Регистрация: 08.05.2012
Сообщений: 448
17.11.2016, 10:15     Сделать паузу перед закрытием AlertDilaog #4
Antohsa, или вставить таки позитивную кнопку, закрывающую алерт?
Antohsa
8 / 12 / 0
Регистрация: 18.10.2016
Сообщений: 112
17.11.2016, 13:27  [ТС]     Сделать паузу перед закрытием AlertDilaog #5
vxg, а postDelay на что мне повесить? Не могу понять...

ExFau$t, тогда все работает верно.... но это лишний клик...
ExFau$t
55 / 55 / 4
Регистрация: 08.05.2012
Сообщений: 448
17.11.2016, 13:44     Сделать паузу перед закрытием AlertDilaog #6
Это не лишний клик, а обязательный, к тому же пользователь может банально выбрать не тот элемент.
Antohsa
8 / 12 / 0
Регистрация: 18.10.2016
Сообщений: 112
17.11.2016, 13:47  [ТС]     Сделать паузу перед закрытием AlertDilaog #7
ExFau$t, Вы пытаетесь не решить мою проблему, а уговорить сделать по другому...

Если даже выбрал не то, это не критично, можно сразу поменять обратно....
vxg
Модератор
 Аватар для vxg
2667 / 1678 / 158
Регистрация: 13.01.2012
Сообщений: 6,276
17.11.2016, 15:55     Сделать паузу перед закрытием AlertDilaog #8
Сообщение было отмечено автором темы, экспертом или модератором как ответ
Antohsa, вот так (задержка 2 секунды для наглядности)
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
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
package com.example.dialogtest;
 
import android.os.Bundle;
import android.app.Activity;
import android.app.AlertDialog;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.ArrayAdapter;
import android.widget.Button;
import android.widget.CheckedTextView;
 
public class MainActivity extends Activity {
    private Button button;
 
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        
        button = (Button)findViewById(R.id.button1);
        
        button.setOnClickListener(new OnClickListener() {
            @Override
            public void onClick(View arg0) {
                AlertDialog.Builder builder = new AlertDialog.Builder(MainActivity.this);
                builder.setTitle("Title");
                builder.setSingleChoiceItems(new ArrayAdapter<String>(MainActivity.this, android.R.layout.select_dialog_singlechoice, new String[]{"Item1", "Item2"})), 0, null); 
                final AlertDialog dialog = builder.show();
                dialog.getListView().setOnItemClickListener(new OnItemClickListener() {
                    @Override
                    public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
                        button.postDelayed(new Runnable() {
                            @Override
                            public void run() {
                                dialog.dismiss();
                            }
                        }, 2000); 
                    }
                });
            }
        });
    }
}
OlegJV
 Аватар для OlegJV
98 / 98 / 29
Регистрация: 13.03.2016
Сообщений: 447
17.11.2016, 16:50     Сделать паузу перед закрытием AlertDilaog #9
Цитата Сообщение от Antohsa Посмотреть сообщение
можно сразу поменять обратно....
Это два лишних клика
Antohsa
8 / 12 / 0
Регистрация: 18.10.2016
Сообщений: 112
17.11.2016, 23:00  [ТС]     Сделать паузу перед закрытием AlertDilaog #10
vxg, button = (Button)findViewById(R.id.button1);, а что за кнопка? Или просто фиктивная? С Visisbility.Gone? Или вообще можно на любой view повесить?
vxg
Модератор
 Аватар для vxg
2667 / 1678 / 158
Регистрация: 13.01.2012
Сообщений: 6,276
18.11.2016, 06:14     Сделать паузу перед закрытием AlertDilaog #11
Antohsa, вроде бы взрослый человек а такой вопрос... это просто тестовая кнопка - должен же я как то вызвать диалог. думаю подойдёт любой вью даже тот который прилетает в слушатель
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
19.11.2016, 14:14     Сделать паузу перед закрытием AlertDilaog
Еще ссылки по теме:

Basic4Android Как реализовать паузу во время выполнения программы
Android Как сделать проверку памяти перед скачиванием файла
Android Как правильно сделать паузу в ходе работы приложения?

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

Или воспользуйтесь поиском по форуму:
Antohsa
8 / 12 / 0
Регистрация: 18.10.2016
Сообщений: 112
19.11.2016, 14:14  [ТС]     Сделать паузу перед закрытием AlertDilaog #12
vxg, спасибо... все получилось...
Yandex
Объявления
19.11.2016, 14:14     Сделать паузу перед закрытием AlertDilaog
Ответ Создать тему
Опции темы

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