Урок 67. Диалоги. ProgressDialog
Урок 67. Диалоги. ProgressDialog
В этом уроке:
- работаем с ProgressDialog
[url=http://www.startandroid.ru/ru/uroki/vse ... l:38uxjc8f]Click here to read this article![/url:38uxjc8f]
- работаем с ProgressDialog
[url=http://www.startandroid.ru/ru/uroki/vse ... l:38uxjc8f]Click here to read this article![/url:38uxjc8f]
Последний раз редактировалось damager82 12 май 2017, 12:00, всего редактировалось 6 раз.
Re: Урок 67. Диалоги. ProgressDialog
damager82 спасибо большое Вам за ваши уроки. У меня вопрос по поводу диалога, почему он не работает? Хочу повесить диалог на создание базы, но он не появляется. Как правильно выводить диалог в моем случае?
Код: Выделить всё
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.ac_main);
ProgressDialog pd = new ProgressDialog(this);
pd.setTitle("Инициализация");
pd.setMessage("Подождите идет инициализация базы данных.");
pd.show();
// Подключаемся к Базе
db = new oDB(this);
pd.dismiss();
}
- KamiSempai
- Сообщения: 1339
- Зарегистрирован: 17 фев 2012, 21:23
- Откуда: Мордор
Re: Урок 67. Диалоги. ProgressDialog
Советую дочитать все уроки до конца. Сразу станет понятно, что не так.
R.id.team
Хватит таскать макулатуру на тренировку! Используй T Note.
Хватит таскать макулатуру на тренировку! Используй T Note.
Re: Урок 67. Диалоги. ProgressDialog
А не проще просто указать на 80 урок.KamiSempai писал(а):Советую дочитать все уроки до конца. Сразу станет понятно, что не так.
- KamiSempai
- Сообщения: 1339
- Зарегистрирован: 17 фев 2012, 21:23
- Откуда: Мордор
Re: Урок 67. Диалоги. ProgressDialog
Каюсь, не уточнил. Но если быть точным то это, пока, 80-90 уроки.maxim писал(а):А не проще просто указать на 80 урок.
Вот еще на закуску: http://habrahabr.ru/post/114570/
R.id.team
Хватит таскать макулатуру на тренировку! Используй T Note.
Хватит таскать макулатуру на тренировку! Используй T Note.
Re: Урок 67. Диалоги. ProgressDialog
Кстати диалоги, вроде, поддерживают межпроцессное взаимодействие. Из отдельного процесса можно сделать dismiss для диалога, работающего в UI-процессе.
Я где-то видел такое, но сам не тестил.
Я где-то видел такое, но сам не тестил.
Re: Урок 67. Диалоги. ProgressDialog
Закроме первый диалог и откроем второй. Он две секунды повисит с анимацией ожидания
Здесь у Вас опечатка в первом слове.
Здесь у Вас опечатка в первом слове.
Re: Урок 67. Диалоги. ProgressDialog
И какой id указать для этого диалога? В отличие от id для виджетов, id для диалогов выбирает программист - вероятно, поэтому соответствующее API объявлено deprecated. Этот id известен только внутри активити, открывшей диалог - так что только она сможет его и закрыть.damager82 писал(а):Кстати диалоги, вроде, поддерживают межпроцессное взаимодействие. Из отдельного процесса можно сделать dismiss для диалога, работающего в UI-процессе.
Я где-то видел такое, но сам не тестил.
Re: Урок 67. Диалоги. ProgressDialog
Я так понимаю, имеются в виду потоки (threads), а не процессы?damager82 писал(а):Кстати диалоги, вроде, поддерживают межпроцессное взаимодействие. Из отдельного процесса можно сделать dismiss для диалога, работающего в UI-процессе.
Я где-то видел такое, но сам не тестил.
Re: Урок 67. Диалоги. ProgressDialog
Да. Надеюсь в уроках я нигде подобную фигню не ляпнул )AndreyI писал(а):Я так понимаю, имеются в виду потоки (threads), а не процессы?damager82 писал(а):Кстати диалоги, вроде, поддерживают межпроцессное взаимодействие. Из отдельного процесса можно сделать dismiss для диалога, работающего в UI-процессе.
Я где-то видел такое, но сам не тестил.
Re: Урок 67. Диалоги. ProgressDialog
Сделала диалог по уроку (только без button), все классно, сообщения он из второго потока получает, меняет свой message..
одно заметила - он, оказывается, не модальный! я щелкаю по экрану эмулятора - диалог исчезает (хотя процесс длится!).
вот коды.
Это тут я его показываю и запускаю поток.
А тут я его меняю, а так же исчезаю в зависимости от сообщения потока.
одно заметила - он, оказывается, не модальный! я щелкаю по экрану эмулятора - диалог исчезает (хотя процесс длится!).
вот коды.
Это тут я его показываю и запускаю поток.
Код: Выделить всё
spinner = new ProgressDialog(MainActivity.this);
spinner.setMessage("Идет загрузка...");
spinner.show();
ThClass Thr = new ThClass(h);
Thr.start();
Код: Выделить всё
h = new Handler() {
public void handleMessage(android.os.Message msg) {
if (msg.what == 1) {
spinner.dismiss();
}
if (msg.what == 2) {
spinner.setMessage(msg.getData().getString("text"));
}
}
};
R.id.team
NullPointerException - что делать???
viewtopic.php?f=33&t=3899&p=28952#p28952
Где моя ошибка?
viewtopic.php?f=60&t=3198
NullPointerException - что делать???
viewtopic.php?f=33&t=3899&p=28952#p28952
Где моя ошибка?
viewtopic.php?f=60&t=3198
Re: Урок 67. Диалоги. ProgressDialog
Добрый вечер!
Автору уроков нереальное, огромнейшее спасибо, это лучшее, что есть в сети по андроиду!
Друзья, у меня 2 вопроса, никак не могу найти решение.
Есть код
1) Ругается на эту строчку
Дело явно в контексте, перепробовал кажется все варианты, ничего не помогает. Может я что-то не до конца понимаю в контексте?
2) Почему ругается на ?
Автору уроков нереальное, огромнейшее спасибо, это лучшее, что есть в сети по андроиду!
Друзья, у меня 2 вопроса, никак не могу найти решение.
Есть код
Код: Выделить всё
OnClickListener LRClickListener = new OnClickListener(){
@Override
public void onClick(View v) {
ProgressDialog pd = new ProgressDialog(this);
pd.setTitle(R.string.app_name);
pd.setMessage(R.string.please_wait);
pd.setCancelable(false);
pd.show();
}
};
Код: Выделить всё
ProgressDialog pd = new ProgressDialog(this);
2) Почему ругается на
Код: Выделить всё
pd.setMessage(R.string.please_wait);
- KamiSempai
- Сообщения: 1339
- Зарегистрирован: 17 фев 2012, 21:23
- Откуда: Мордор
Re: Урок 67. Диалоги. ProgressDialog
1) Ругается по тому, что this ссылается не на Activity а на LRClickListener. this - это ссылка на класс в котором выполняется код.
Используйте <Имя класса Activity>.this
Например, если ваша активити называется MainActivity то нужно писать так: MainActivity.this
На самом деле уже давно избитая проблема, нет такого форума где не задали подобного вопроса )
2) Посмотрите внимательней на то, что именно принимает setMessage в качестве параметра. В этот метод нужно передавать объект CharSequence. String тоже подойдет, но Вы передаете int. "R.string.please_wait" - это id строки. Что бы получит саму строку можно воспользоваться getString(R.string.please_wait).
Используйте <Имя класса Activity>.this
Например, если ваша активити называется MainActivity то нужно писать так: MainActivity.this
На самом деле уже давно избитая проблема, нет такого форума где не задали подобного вопроса )
2) Посмотрите внимательней на то, что именно принимает setMessage в качестве параметра. В этот метод нужно передавать объект CharSequence. String тоже подойдет, но Вы передаете int. "R.string.please_wait" - это id строки. Что бы получит саму строку можно воспользоваться getString(R.string.please_wait).
R.id.team
Хватит таскать макулатуру на тренировку! Используй T Note.
Хватит таскать макулатуру на тренировку! Используй T Note.
Re: Урок 67. Диалоги. ProgressDialog
Большое, спасибо!KamiSempai писал(а):1) Ругается по тому, что this ссылается не на Activity а на LRClickListener. this - это ссылка на класс в котором выполняется код.
Используйте <Имя класса Activity>.this
Например, если ваша активити называется MainActivity то нужно писать так: MainActivity.this
На самом деле уже давно избитая проблема, нет такого форума где не задали подобного вопроса )
2) Посмотрите внимательней на то, что именно принимает setMessage в качестве параметра. В этот метод нужно передавать объект CharSequence. String тоже подойдет, но Вы передаете int. "R.string.please_wait" - это id строки. Что бы получит саму строку можно воспользоваться getString(R.string.please_wait).
Очень стыдно за такие вопросы)
Re: Урок 67. Диалоги. ProgressDialog
Добрый день всем! Есть следующая проблема с диалогами....
У меня есть активити, в нем на нажатие кнопки повешен хандлер. Хандлер в свою очередь запускает работу класса, который работает с БД MySQL. Класс, собственно, работает прекрасно, но когда я нажимаю на кнопку, то у меня весь интерфейс подвисает пока операция не завершится. А мне очень нужно отобразить прогресс диалог пока эта операция выполняется. Я слаб еще в java и после delphi мне очень сложно работать с классами хэндлерами и т.п. Может кто подсказать, что мне делать?
Класс, работающий с БД не содержит ни активити, ничего вообще.
Собственно, пример использовал отсюда: https://github.com/IskenHuang/android-m ... ent-sample и лишь немного переделал для себя. Кто знает решение?
У меня есть активити, в нем на нажатие кнопки повешен хандлер. Хандлер в свою очередь запускает работу класса, который работает с БД MySQL. Класс, собственно, работает прекрасно, но когда я нажимаю на кнопку, то у меня весь интерфейс подвисает пока операция не завершится. А мне очень нужно отобразить прогресс диалог пока эта операция выполняется. Я слаб еще в java и после delphi мне очень сложно работать с классами хэндлерами и т.п. Может кто подсказать, что мне делать?
Класс, работающий с БД не содержит ни активити, ничего вообще.
Собственно, пример использовал отсюда: https://github.com/IskenHuang/android-m ... ent-sample и лишь немного переделал для себя. Кто знает решение?
- Mikhail_dev
- Сообщения: 2386
- Зарегистрирован: 09 янв 2012, 14:45
- Откуда: Самара
Re: Урок 67. Диалоги. ProgressDialog
Работайте с AsyncTask. Вот что вам надо
[syntax=java]
class MyAsyncTask extends AsyncTask<Void, Void, Void> {
Activity myActivity;
public MyAsyncTask(Activity activity) {
myActivity = activity;
}
@Override
protected void onPreExecute() {
super.onPreExecute();
myActivity.setProgressBarIndeterminateVisibility(true);
}
@Override
protected Void doInBackground(Void... params) {
//здесь выполнять работу с базой данных (этот метод выполняется в другом потоке)
return null;
}
@Override
protected void onPostExecute(Void result) {
super.onPostExecute(result);
myActivity.setProgressBarIndeterminateVisibility(false);
}
}
[/syntax]
Только перед setContentView активности, надо поставить
requestWindowFeature(Window.FEATURE_INDETERMINATE_PROGRESS);
тогда будет отображаться СТАНДАРТНЫЙ ProgressBar, справа сверху.
myActivity.setProgressBarIndeterminateVisibility(true);
и
myActivity.setProgressBarIndeterminateVisibility(false);
включают и отключают его.
Выполнение будет выглядеть как-то так
New MyAsyncTask(activity).execute();
Очередность выполнения такая
preExecute, далее doInBackground, далее, postExecute. Первый и третий выполняется в ОСНОВНОМ потоке, тогда как второй в ДРУГОМ.
edit. Все необходимые данные можно передать в конструктор. Я передаю туда объект активности для того, что бы ей включать и отключать её СТАНДАРТНЫЙ прогресс бар.
[syntax=java]
class MyAsyncTask extends AsyncTask<Void, Void, Void> {
Activity myActivity;
public MyAsyncTask(Activity activity) {
myActivity = activity;
}
@Override
protected void onPreExecute() {
super.onPreExecute();
myActivity.setProgressBarIndeterminateVisibility(true);
}
@Override
protected Void doInBackground(Void... params) {
//здесь выполнять работу с базой данных (этот метод выполняется в другом потоке)
return null;
}
@Override
protected void onPostExecute(Void result) {
super.onPostExecute(result);
myActivity.setProgressBarIndeterminateVisibility(false);
}
}
[/syntax]
Только перед setContentView активности, надо поставить
requestWindowFeature(Window.FEATURE_INDETERMINATE_PROGRESS);
тогда будет отображаться СТАНДАРТНЫЙ ProgressBar, справа сверху.
myActivity.setProgressBarIndeterminateVisibility(true);
и
myActivity.setProgressBarIndeterminateVisibility(false);
включают и отключают его.
Выполнение будет выглядеть как-то так
New MyAsyncTask(activity).execute();
Очередность выполнения такая
preExecute, далее doInBackground, далее, postExecute. Первый и третий выполняется в ОСНОВНОМ потоке, тогда как второй в ДРУГОМ.
edit. Все необходимые данные можно передать в конструктор. Я передаю туда объект активности для того, что бы ей включать и отключать её СТАНДАРТНЫЙ прогресс бар.
Re: Урок 67. Диалоги. ProgressDialog
Спасибо большое за отклик, но как-то не так работает. Во-первых местоположение прогресса не знаю как сменить в случае myActivity.setProgressBarIndeterminateVisibility(true);, во-вторых, прогресс успевает появиться, но даже не крутится, а просто исчезает когда операция завершилась. И в-третьих, когда я вместо него пишу progressdlg.show() в onPreExecute и progressdlg.cancel() в onPostExecute, то прогресс появляется на долю секунды. Во время операции так же все подвисает. Что мне делать, если я хочу отобразить нормальный прогресс бар?no-- писал(а):Работайте с AsyncTask. Вот что вам надо
[syntax=java]
class MyAsyncTask extends AsyncTask<Void, Void, Void> {
Activity myActivity;
public MyAsyncTask(Activity activity) {
myActivity = activity;
}
@Override
protected void onPreExecute() {
super.onPreExecute();
myActivity.setProgressBarIndeterminateVisibility(true);
}
@Override
protected Void doInBackground(Void... params) {
//здесь выполнять работу с базой данных (этот метод выполняется в другом потоке)
return null;
}
@Override
protected void onPostExecute(Void result) {
super.onPostExecute(result);
myActivity.setProgressBarIndeterminateVisibility(false);
}
}
[/syntax]
Только перед setContentView активности, надо поставить
requestWindowFeature(Window.FEATURE_INDETERMINATE_PROGRESS);
тогда будет отображаться СТАНДАРТНЫЙ ProgressBar, справа сверху.
myActivity.setProgressBarIndeterminateVisibility(true);
и
myActivity.setProgressBarIndeterminateVisibility(false);
включают и отключают его.
Выполнение будет выглядеть как-то так
New MyAsyncTask(activity).execute();
Очередность выполнения такая
preExecute, далее doInBackground, далее, postExecute. Первый и третий выполняется в ОСНОВНОМ потоке, тогда как второй в ДРУГОМ.
edit. Все необходимые данные можно передать в конструктор. Я передаю туда объект активности для того, что бы ей включать и отключать её СТАНДАРТНЫЙ прогресс бар.
- Mikhail_dev
- Сообщения: 2386
- Зарегистрирован: 09 янв 2012, 14:45
- Откуда: Самара
Re: Урок 67. Диалоги. ProgressDialog
никак. он стандартный.Во-первых местоположение прогресса не знаю как сменить в случае myActivity.setProgressBarIndeterminateVisibility(true)
значит операцию работы с базой данных выполняете не в doInBackgroundво-вторых, прогресс успевает появиться, но даже не крутится, а просто исчезает когда операция завершилась.
Если хотите свой использовать прогресс, то да, в preExecute начинайте показывать, в postExecute прекращайте показывать. Но работа, из-за которой у вас подвисает поток на время, должна быть в doInbackground
Re: Урок 67. Диалоги. ProgressDialog
Спасибо большое за помощь! Всё получилось. Просто в doInBackground я запускал хэндлер, который выполнял функцию. Ну в общем с того примера, что я указал просто решил обработчик запустить ))no-- писал(а):никак. он стандартный.Во-первых местоположение прогресса не знаю как сменить в случае myActivity.setProgressBarIndeterminateVisibility(true)значит операцию работы с базой данных выполняете не в doInBackgroundво-вторых, прогресс успевает появиться, но даже не крутится, а просто исчезает когда операция завершилась.
Если хотите свой использовать прогресс, то да, в preExecute начинайте показывать, в postExecute прекращайте показывать. Но работа, из-за которой у вас подвисает поток на время, должна быть в doInbackground
Re: Урок 67. Диалоги. ProgressDialog
В побочном потоке выполняется ресурсоемкая функция, как-то можно закрепить ProgressDialog пока выполняется процедура?Нажатие на кнопку назад закрывает диалог, для меня такое развитие событий нежелательно.