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

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

Войти
Регистрация
Восстановить пароль
 
JerryLetehen
5 / 5 / 0
Регистрация: 07.11.2015
Сообщений: 133
#1

Как менять message AlertDialog в зависимости от progress SeekBar? - Android

15.11.2016, 21:04. Просмотров 324. Ответов 14
Метки нет (Все метки)

Доброго времени суток) В моём приложении при нажатии на TextVeiw появляется AlertDialog, в который я всунул SeekBar. Нужно, чтобы message менялся в зависимости от progress SeekBar. В гугле, где ни посмотрю, везде в onProgressChanged добавлена строчка кода, где приписывают .setMessage(... + progress) (или .setText). Но у меня это не работает. Возможно, что-то делаю не так(новичок), help!!!
Кусок кода
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
editVolume.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                final AlertDialog.Builder volumeSetter = new AlertDialog.Builder(MainActivity.this);
                volumeSetter.setTitle(R.string.ChangeVolume);
                volumeSetter.setMessage(R.string.Set);
                volumeBar = new SeekBar(MainActivity.this);
                volumesetter = (AudioManager) getSystemService(AUDIO_SERVICE);
                volumeBar.setMax(volumesetter.getStreamMaxVolume(AudioManager.STREAM_RING));
                volumeBar.setProgress(volumesetter.getStreamVolume(AudioManager.STREAM_RING));
                volumeBar.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() {
                    @Override
                    public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) {
                        volume = progress;
                        volumeSetter.setMessage(R.string.Set + progress);
                    }
 
                    @Override
                    public void onStartTrackingTouch(SeekBar seekBar) {
                    }
 
                    @Override
                    public void onStopTrackingTouch(SeekBar seekBar) {
                    }
                });
                volumeSetter.setView(volumeBar);
                volumeSetter.setNeutralButton(R.string.OkeyButton, new DialogInterface.OnClickListener() {
                    @Override
                    public void onClick(DialogInterface dialog, int which) {
                        editVolume.setText(getString(R.string.Set) + volume);
                        volume_set = volume;
                        checkvolume = true;
                        dialog.cancel();
                    }
                });
                volumeSetter.setNegativeButton(R.string.Back_Button, new DialogInterface.OnClickListener() {
                    @Override
                    public void onClick(DialogInterface dialog, int which) {
                        dialog.cancel();
                    }
                });
                volumeSetter.show();
            }
        });

Весь код
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
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
package com.example.jerryletehen.setyourvolume;
 
import android.app.TimePickerDialog;
import android.content.Context;
import android.content.DialogInterface;
import android.support.v7.app.AlertDialog;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.SeekBar;
import android.widget.TextView;
import android.widget.TimePicker;
import android.media.AudioManager;
 
import java.util.Calendar;
 
public class MainActivity extends AppCompatActivity {
    AudioManager volumesetter;
    TimePickerDialog timepickerdialog;
    SeekBar volumeBar;
    Calendar time = Calendar.getInstance();
    int volume = 0;
    int volume_set;
    int time_set_h;
    int time_set_m;
    boolean checktime = false;
    boolean checkvolume = false;
 
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        // finals
        final TextView editTime = (TextView) findViewById(R.id.editTime);
        final TextView editVolume = (TextView) findViewById(R.id.editVolume);
        final Button button = (Button) findViewById(R.id.button);
        // Users clicks
        // set Time
        editTime.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Calendar mcurrentTime = Calendar.getInstance();
                int hour = mcurrentTime.get(Calendar.HOUR_OF_DAY);
                int minute = mcurrentTime.get(Calendar.MINUTE);
 
                timepickerdialog = new TimePickerDialog(MainActivity.this, new TimePickerDialog.OnTimeSetListener() {
                    @Override
                    public void onTimeSet(TimePicker timePicker, int selectedHour, int selectedMinute) {
                        String selectedMinute0;
                        if (selectedMinute == 0 || selectedMinute == 1 || selectedMinute == 2 || selectedMinute == 3 || selectedMinute == 4 || selectedMinute == 5 || selectedMinute == 6 || selectedMinute == 7 || selectedMinute == 8 || selectedMinute == 9) {
                            selectedMinute0 = "0";
                            editTime.setText(selectedHour + ":" + selectedMinute0 + selectedMinute);
                            checktime = true;
                        } else {
                            editTime.setText(selectedHour + ":" + selectedMinute);
                            time_set_h = selectedHour;
                            time_set_m = selectedMinute;
                            checktime = true;
                        }
                    }
                }, hour, minute, true);//Yes 24 hour time
                timepickerdialog.show();
            }
        });
        // set Volume level
        editVolume.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                final AlertDialog.Builder volumeSetter = new AlertDialog.Builder(MainActivity.this);
                volumeSetter.setTitle(R.string.ChangeVolume);
                volumeSetter.setMessage(R.string.Set);
                volumeBar = new SeekBar(MainActivity.this);
                volumesetter = (AudioManager) getSystemService(AUDIO_SERVICE);
                volumeBar.setMax(volumesetter.getStreamMaxVolume(AudioManager.STREAM_RING));
                volumeBar.setProgress(volumesetter.getStreamVolume(AudioManager.STREAM_RING));
                volumeBar.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() {
                    @Override
                    public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) {
                        volume = progress;
                        volumeSetter.setMessage(R.string.Set + progress);
                    }
 
                    @Override
                    public void onStartTrackingTouch(SeekBar seekBar) {
                    }
 
                    @Override
                    public void onStopTrackingTouch(SeekBar seekBar) {
                    }
                });
                volumeSetter.setView(volumeBar);
                volumeSetter.setNeutralButton(R.string.OkeyButton, new DialogInterface.OnClickListener() {
                    @Override
                    public void onClick(DialogInterface dialog, int which) {
                        editVolume.setText(getString(R.string.Set) + volume);
                        volume_set = volume;
                        checkvolume = true;
                        dialog.cancel();
                    }
                });
                volumeSetter.setNegativeButton(R.string.Back_Button, new DialogInterface.OnClickListener() {
                    @Override
                    public void onClick(DialogInterface dialog, int which) {
                        dialog.cancel();
                    }
                });
                volumeSetter.show();
            }
        });
        // main button
        button.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                AlertDialog.Builder button_alert = new AlertDialog.Builder(MainActivity.this);
                if (!checktime) {
                    button_alert.setMessage(R.string.DidnotSetTime);
                    button_alert.setNegativeButton(R.string.Back_Button, new DialogInterface.OnClickListener() {
                        @Override
                        public void onClick(DialogInterface dialog, int which) {
                            dialog.cancel();
                        }
                    });
                } else if (!checkvolume) {
                    button_alert.setMessage(R.string.DidnotSetVolumeLevel);
                    button_alert.setNegativeButton(R.string.Back_Button, new DialogInterface.OnClickListener() {
                        @Override
                        public void onClick(DialogInterface dialog, int which) {
                            dialog.cancel();
                        }
                    });
                } else {
                    button_alert.setMessage(R.string.CompleteText);
                    button_alert.setPositiveButton(R.string.OkeyButton, new DialogInterface.OnClickListener() {
                        @Override
                        public void onClick(DialogInterface dialog, int which) {
                            volume_method();
                            dialog.cancel();
                        }
                    });
                    button_alert.setNegativeButton(R.string.Back_Button, new DialogInterface.OnClickListener() {
                        @Override
                        public void onClick(DialogInterface dialog, int which) {
                            dialog.cancel();
                        }
                    });
                }
                button_alert.show();
            }
        });
    }
 
    private void volume_method() {
        volumesetter.getStreamMaxVolume(AudioManager.STREAM_NOTIFICATION);
        volumesetter.setStreamVolume(AudioManager.STREAM_NOTIFICATION, volume_set, volume_set);
        volumesetter.getStreamMaxVolume(AudioManager.STREAM_SYSTEM);
        volumesetter.setStreamVolume(AudioManager.STREAM_SYSTEM, volume_set, volume_set);
        volumesetter.getStreamMaxVolume(AudioManager.STREAM_RING);
        volumesetter.setStreamVolume(AudioManager.STREAM_RING, volume_set, volume_set);
    }
}
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
ExFau$t
223 / 206 / 41
Регистрация: 08.05.2012
Сообщений: 1,148
15.11.2016, 21:06     Как менять message AlertDialog в зависимости от progress SeekBar? #2
Вот, возможно, то, что тебе нужно: ProgressDialog вместо алерта.
JerryLetehen
5 / 5 / 0
Регистрация: 07.11.2015
Сообщений: 133
16.11.2016, 20:16  [ТС]     Как менять message AlertDialog в зависимости от progress SeekBar? #3
Цитата Сообщение от ExFau$t Посмотреть сообщение
Вот, возможно, то, что тебе нужно: ProgressDialog вместо алерта.
Эм... не думаю, что будет вызвать лучше его.... Хотя***.... А есть ещё варианты?
ExFau$t
223 / 206 / 41
Регистрация: 08.05.2012
Сообщений: 1,148
16.11.2016, 20:22     Как менять message AlertDialog в зависимости от progress SeekBar? #4
А что тебе не нравится, туда также кастомную вьюху можно залить, я просто не знаю как обновить созданный алерт, честно. Если только dismiss его, а потом создать заново, но это бред.
JerryLetehen
5 / 5 / 0
Регистрация: 07.11.2015
Сообщений: 133
16.11.2016, 20:36  [ТС]     Как менять message AlertDialog в зависимости от progress SeekBar? #5
Цитата Сообщение от ExFau$t Посмотреть сообщение
А что тебе не нравится
Дело в том, что у меня "функциональный" алерт, при нажатии на негативную/позитивную кнопки срабатывают соответствующие функции... А что если вызвать регулировку громкости телефона сразу же... то есть я буду менять ползунок SeekBar и этот же ползунок будет ползать по регулировке громкости в online режиме так сказать??
ExFau$t
223 / 206 / 41
Регистрация: 08.05.2012
Сообщений: 1,148
16.11.2016, 20:53     Как менять message AlertDialog в зависимости от progress SeekBar? #6
Цитата Сообщение от JerryLetehen Посмотреть сообщение
то есть я буду менять ползунок SeekBar и этот же ползунок будет ползать по регулировке громкости в online режиме так сказать??
Утвердительное предложение окончилось знаками вопроса, я ни слова не понял, причём тут громкость телефона? Вообще алерт предназначен для алертов, а для всяких сложностей используют фрагменты.
Antohsa
8 / 12 / 0
Регистрация: 18.10.2016
Сообщений: 115
17.11.2016, 02:31     Как менять message AlertDialog в зависимости от progress SeekBar? #7
SetMessage принимает либо ресурс в int, либо строку.

Вначале ты передаешь (volumeSetter.setMessage(R.string.Set) ресурс по int, он находит строку и подставляет...

Далее ты volumeSetter.setMessage(R.string.Set + progress) также передаешь int, но такого ресурса нет (R.string.Set + progress = число).. видимо выводит пустоту? или число в несколько миллионов?

Попробуй использовать getString(ресурс, (int)подстанвока), а саму строку задай с конструкцией в виде %1$d

Чтобы понять работает или нет, попробуй volumeSetter.setMessage(Integer.toString(porgress));
JerryLetehen
5 / 5 / 0
Регистрация: 07.11.2015
Сообщений: 133
17.11.2016, 18:10  [ТС]     Как менять message AlertDialog в зависимости от progress SeekBar? #8
Цитата Сообщение от Antohsa Посмотреть сообщение
видимо выводит пустоту?
Set выводит, а прогресс - нет.
Цитата Сообщение от Antohsa Посмотреть сообщение
а саму строку задай с конструкцией в виде %1$d
Хех... Не понимаю я таких сложных слов... %1 - понятно, $d - понятно, а вот задать строку с такой конструкцией... не..
Цитата Сообщение от Antohsa Посмотреть сообщение
попробуй volumeSetter.setMessage(Integer.toString(porgress));
Не-а
ExFau$t
223 / 206 / 41
Регистрация: 08.05.2012
Сообщений: 1,148
17.11.2016, 18:40     Как менять message AlertDialog в зависимости от progress SeekBar? #9
Цитата Сообщение от JerryLetehen Посмотреть сообщение
Не понимаю я таких сложных слов... %1 - понятно, $d - понятно, а вот задать строку с такой конструкцией... не..
String.format()
Antohsa
8 / 12 / 0
Регистрация: 18.10.2016
Сообщений: 115
17.11.2016, 22:50     Как менять message AlertDialog в зависимости от progress SeekBar? #10
JerryLetehen, при volumeSetter.setMessage(Integer.toString(porgress)); вообще ничего не происходит?
JerryLetehen
5 / 5 / 0
Регистрация: 07.11.2015
Сообщений: 133
18.11.2016, 07:25  [ТС]     Как менять message AlertDialog в зависимости от progress SeekBar? #11
Цитата Сообщение от Antohsa Посмотреть сообщение
вообще ничего не происходит?
Именно
Khaker_tt
30 / 30 / 6
Регистрация: 24.11.2015
Сообщений: 326
Завершенные тесты: 1
19.11.2016, 19:23     Как менять message AlertDialog в зависимости от progress SeekBar? #12
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
AlertDialog.Builder alertDialogBuilder = new AlertDialog.Builder(getActivity())
                        .setTitle(getResources().getString(R.string.dialog_title))
                        .setMessage("Пожалуйста подождите ...")
                        .setNeutralButton(R.string.check, null);
 
AlertDialog alertDialog = alertDialogBuilder.create();
alertDialog.show();
 
Button b_neutral = alertDialog.getButton(DialogInterface.BUTTON_NEUTRAL);
b_neutral.setOnClickListener(new View.OnClickListener() {
                    @Override
                    public void onClick(View view) {
                        TextView tv_message = (TextView) alertDialog.findViewById(android.R.id.message);
                        tv_message.setText("Начало работы ...");
    }
});
JerryLetehen
5 / 5 / 0
Регистрация: 07.11.2015
Сообщений: 133
20.11.2016, 12:08  [ТС]     Как менять message AlertDialog в зависимости от progress SeekBar? #13
Цитата Сообщение от Khaker_tt Посмотреть сообщение
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
AlertDialog.Builder alertDialogBuilder = new AlertDialog.Builder(getActivity())
                        .setTitle(getResources().getString(R.string.dialog_title))
                        .setMessage("Пожалуйста подождите ...")
                        .setNeutralButton(R.string.check, null);
 
AlertDialog alertDialog = alertDialogBuilder.create();
alertDialog.show();
 
Button b_neutral = alertDialog.getButton(DialogInterface.BUTTON_NEUTRAL);
b_neutral.setOnClickListener(new View.OnClickListener() {
                    @Override
                    public void onClick(View view) {
                        TextView tv_message = (TextView) alertDialog.findViewById(android.R.id.message);
                        tv_message.setText("Начало работы ...");
    }
});
Эм... А что это?? Как это поможет решить мою проблему?
Khaker_tt
30 / 30 / 6
Регистрация: 24.11.2015
Сообщений: 326
Завершенные тесты: 1
20.11.2016, 12:22     Как менять message AlertDialog в зависимости от progress SeekBar? #14
это пример у моего приложение которые текст Alert dialog меняется в зависимость от изменение TextView. Вам только придется переделать на SeekBar.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
20.11.2016, 12:31     Как менять message AlertDialog в зависимости от progress SeekBar?
Еще ссылки по теме:

Android Как менять Theme у приложения в зависимости от версии андроид?
Android Как сделать такое AlertDialog
Progress Button, как вызвать метод, а после закончить Progress? Android
Android Как поменять цвет seekBar?
Android SeekBar и Arduino

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

Или воспользуйтесь поиском по форуму:
JerryLetehen
5 / 5 / 0
Регистрация: 07.11.2015
Сообщений: 133
20.11.2016, 12:31  [ТС]     Как менять message AlertDialog в зависимости от progress SeekBar? #15
Цитата Сообщение от Khaker_tt Посмотреть сообщение
Вам только придется переделать на SeekBar.
У вас меняется из-за нажатия на кнопку, если я правильно понял. А у меня должен меняться текст в onProgressChanged, который почему-то меняться вовсе не хочет.
Yandex
Объявления
20.11.2016, 12:31     Как менять message AlertDialog в зависимости от progress SeekBar?
Ответ Создать тему
Опции темы

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