Урок 60. Диалоги. AlertDialog: Title, Message, Icon, Buttons

Обсуждение уроков
Аватара пользователя
damager82
Администратор
Сообщения: 1383
Зарегистрирован: 07 янв 2012, 11:32
Контактная информация:

Урок 60. Диалоги. AlertDialog: Title, Message, Icon, Buttons

Сообщение damager82 » 27 фев 2012, 03:00

В этом уроке:

- создаем AlertDialog
- настраиваем заголовок, сообщение, картинку и кнопки

[url=http://www.startandroid.ru/ru/uroki/vse ... l:2lxz8x8h]Click here to read this article![/url:2lxz8x8h]
Последний раз редактировалось damager82 08 май 2017, 16:04, всего редактировалось 6 раз.
Добро пожаловать на форум сайта StartAndroid
ИзображениеИзображение

caliskan
Сообщения: 3
Зарегистрирован: 27 фев 2012, 11:14

Re: Урок 60. Диалоги. AlertDialog: Title, Message, Icon, But

Сообщение caliskan » 29 фев 2012, 13:08

Здравствуйте, у меня в диалоге указывается строка adb.setMessage(str), при первом вызове диалога все показывается правильно потом str изменяется но в диалоге почему то остаются старые значения. в чем может быть проблема?

Аватара пользователя
damager82
Администратор
Сообщения: 1383
Зарегистрирован: 07 янв 2012, 11:32
Контактная информация:

Re: Урок 60. Диалоги. AlertDialog: Title, Message, Icon, But

Сообщение damager82 » 01 мар 2012, 10:40

caliskan писал(а):Здравствуйте, у меня в диалоге указывается строка adb.setMessage(str), при первом вызове диалога все показывается правильно потом str изменяется но в диалоге почему то остаются старые значения. в чем может быть проблема?
Как раз об этом сегодняшний урок ))
Добро пожаловать на форум сайта StartAndroid
ИзображениеИзображение

caliskan
Сообщения: 3
Зарегистрирован: 27 фев 2012, 11:14

Re: Урок 60. Диалоги. AlertDialog: Title, Message, Icon, But

Сообщение caliskan » 01 мар 2012, 10:41

спасибо. почитаю)

Діма
Сообщения: 11
Зарегистрирован: 13 июл 2012, 13:23

Re: Урок 60. Диалоги. AlertDialog: Title, Message, Icon, But

Сообщение Діма » 13 июл 2012, 13:39

Привіт, є Activity1 запускає Activity2, в Activity2 використовую AsyncTask<Void, Void, Void> в методі doInBackground ставлю затримку на 5 секунд, в методі onPostExecute роблю виклик showDialog, в Activity2 описано метод protected Dialog onCreateDialog(int id), коли запускаю на виконнання AsyncTask перехожу на Activity1 діалогу нема, якщо залишаюсь в Activity2 то появляється, що зробити щоб появилось в Activity1?

Аватара пользователя
damager82
Администратор
Сообщения: 1383
Зарегистрирован: 07 янв 2012, 11:32
Контактная информация:

Re: Урок 60. Диалоги. AlertDialog: Title, Message, Icon, But

Сообщение damager82 » 13 июл 2012, 17:41

Діма писал(а):Привіт, є Activity1 запускає Activity2, в Activity2 використовую AsyncTask<Void, Void, Void> в методі doInBackground ставлю затримку на 5 секунд, в методі onPostExecute роблю виклик showDialog, в Activity2 описано метод protected Dialog onCreateDialog(int id), коли запускаю на виконнання AsyncTask перехожу на Activity1 діалогу нема, якщо залишаюсь в Activity2 то появляється, що зробити щоб появилось в Activity1?
Этот материал смотрели? Там, в принципе, есть наводка, что нужно делать.

Можно вынести AsyncTask в отдельный класс и создать какое-нить static хранилище для AsyncTask, которое будет доступно для всех Activity.
Activiy2 создает задачу AsyncTask, дает ей ссылку на себя, и кладет задачу в хранилище.
Далее Activity2 закрывается, и при этом в onStop оно ссылку на себя удаляет из задачи.
Activity1 появляется, и в onStart берет из хранилища задачу AsyncTask и дает ей ссылку на себя.
Когда задача срабатывает, она работает с Activity1.

На практике не пробовал, но вроде должно сработать. Отпишитесь, потом, плз! Интересная задача.
Добро пожаловать на форум сайта StartAndroid
ИзображениеИзображение

AndreyI
Сообщения: 372
Зарегистрирован: 14 май 2012, 16:18

Re: Урок 60. Диалоги. AlertDialog: Title, Message, Icon, But

Сообщение AndreyI » 16 июл 2012, 12:17

damager82 писал(а):
Этот материал смотрели? Там, в принципе, есть наводка, что нужно делать.

Можно вынести AsyncTask в отдельный класс и создать какое-нить static хранилище для AsyncTask, которое будет доступно для всех Activity.
Activiy2 создает задачу AsyncTask, дает ей ссылку на себя, и кладет задачу в хранилище.
Далее Activity2 закрывается, и при этом в onStop оно ссылку на себя удаляет из задачи.
Activity1 появляется, и в onStart берет из хранилища задачу AsyncTask и дает ей ссылку на себя.
Когда задача срабатывает, она работает с Activity1.

На практике не пробовал, но вроде должно сработать. Отпишитесь, потом, плз! Интересная задача.
Что-то мне подсказывает, что так не должно работать. Здесь несколько другой случай, переход c activity2 на activity1 осуществляется пользователем нажатием на кнопку возврат и система не вызывает onRetainNonConfigurationInstance() , а других способов передачи ссылки на объекты между activity я не знаю (буду очень признателен, если кто подскажет).
Но проблема очень важна, т.к. это может вызывать исключения, и не проявиться на стадии тестирования. И это нужно учитывать. Я имею в виду то, что процессы порожденные activity могут продолжать жить после уничтожения самой activity , поэтому нужно предусмотреть либо остановку этих процессов в onDestroy или сам процесс должен контролировать состояние своего родителя (к примеру вызовом Activity2.this.isFinishing()) .
Еще можно предотвратить уничтожение самой Activity2 перехватом кнопки возврат, тогда можно будет в любой момент к ней вернуться и восстановить связь с процессом. Можно, к примеру, использовать код:
@Override
public void onBackPressed() {
Intent intent = new Intent(getApplicationContext(), Activity1.class);
intent.setFlags(Intent.FLAG_ACTIVITY_REORDER_TO_FRONT);
startActivity(intent);
}
Тогда Activity2 не будет уничтожено, а просто переместится в стеке, и его можно будет вызвать снова, onCreate при этом вызываться не будет, вместо него будет вызван onNewIntent. Связь с процессами снова будет восстановлена. Но здесь возникает много подводных камней.
А вообще, если нужен процесс с которым нужна связь из любых Activity, то думаю, лучше будет использовать сервис.

Діма
Сообщения: 11
Зарегистрирован: 13 июл 2012, 13:23

Re: Урок 60. Диалоги. AlertDialog: Title, Message, Icon, But

Сообщение Діма » 17 июл 2012, 09:04

Я навів простий приклад з двома Activity, в мене задача складніша в мене є декілька Activity в одному із них створюється потік для виконання деякої задачі, вона займає деякий час по закінченню мені треба видати діалог, але я можу находитись в любому із можливих Activity, в цьому в мене і проблема) Дякую за допомогу AndreyI, буду пробувати сервіс. Але є бажання, подумати як зробити цю задачу через AsyncTask)

Аватара пользователя
Finch
Сообщения: 439
Зарегистрирован: 16 июл 2012, 21:37

Re: Урок 60. Диалоги. AlertDialog: Title, Message, Icon, But

Сообщение Finch » 17 июл 2012, 09:46

Broadcast Receiver попро6уй + полиморфизм
делаешь а6страктную активити (abstract, extends Activity)
дальше создаешь ресивер...
перегружаешь конструктор

Код: Выделить всё

@Override
            public void onReceive(Context context, Intent intent) {
               //тут твой диалог
            }
наследуешь потом свои активити от этой и в нужной послаешь 6родкаст во вложенном асинктаске и во всех твоих активити 6удет диалог

П.С. программирую 2 месяца, если не прав то поправте
CEO of a company R.id.team

AndreyI
Сообщения: 372
Зарегистрирован: 14 май 2012, 16:18

Re: Урок 60. Диалоги. AlertDialog: Title, Message, Icon, But

Сообщение AndreyI » 17 июл 2012, 10:26

Диалог можно оформить как отдельную Activity и вызывать его из любого потока.

Діма
Сообщения: 11
Зарегистрирован: 13 июл 2012, 13:23

Re: Урок 60. Диалоги. AlertDialog: Title, Message, Icon, But

Сообщение Діма » 17 июл 2012, 11:48

На практике не пробовал, но вроде должно сработать. Отпишитесь, потом, плз! Интересная задача.
Я зробив так:
public static class MyActivity extends Activity {

private static Context myContext;
@Override
protected void onCreate(Bundle savedInstanceState) {
this.setMyContext(this);
Log.d(LOG_TAG, getMyContext().toString());
super.onCreate(savedInstanceState);
}

public static Context getMyContext() {
return myContext;
}

public void setMyContext(Context myContext) {
MyActivity.myContext = myContext;
}
}

Потім кожному Activity наслідую MyActivity, тоді в методі onPostExecute класу AsyncTask я можу викликати getMyContext() і показати діалог в активному Activity)
В кого є краща ідея прошу пишіть на форум)

Аватара пользователя
damager82
Администратор
Сообщения: 1383
Зарегистрирован: 07 янв 2012, 11:32
Контактная информация:

Re: Урок 60. Диалоги. AlertDialog: Title, Message, Icon, But

Сообщение damager82 » 17 июл 2012, 12:17

AndreyI писал(а):Здесь несколько другой случай, переход c activity2 на activity1 осуществляется пользователем нажатием на кнопку возврат и система не вызывает onRetainNonConfigurationInstance() , а других способов передачи ссылки на объекты между activity я не знаю (буду очень признателен, если кто подскажет).
Я предложил использовать какое-нить статическое хранилище. Не onRetainNonConfigurationInstance.
Добро пожаловать на форум сайта StartAndroid
ИзображениеИзображение

Аватара пользователя
damager82
Администратор
Сообщения: 1383
Зарегистрирован: 07 янв 2012, 11:32
Контактная информация:

Re: Урок 60. Диалоги. AlertDialog: Title, Message, Icon, But

Сообщение damager82 » 17 июл 2012, 12:28

Діма писал(а):Потім кожному Activity наслідую MyActivity, тоді в методі onPostExecute класу AsyncTask я можу викликати getMyContext() і показати діалог в активному Activity)
В кого є краща ідея прошу пишіть на форум)
Хитро) Вместо статики для AsycnTask применяем статику для Activity.
Но надо как-то учитывать возможность того, что onPostExecute может быть вызван в момент, когда старое Activity уничтожено, а новое еще не создалось. Я седня допишу на эту тему свои мысли в уроке 91.
Добро пожаловать на форум сайта StartAndroid
ИзображениеИзображение

Діма
Сообщения: 11
Зарегистрирован: 13 июл 2012, 13:23

Re: Урок 60. Диалоги. AlertDialog: Title, Message, Icon, But

Сообщение Діма » 17 июл 2012, 12:49

Хитро) Вместо статики для AsycnTask применяем статику для Activity.
Но надо как-то учитывать возможность того, что onPostExecute может быть вызван в момент, когда старое Activity уничтожено, а новое еще не создалось. Я седня допишу на эту тему свои мысли в уроке 91.
Постарайтесь описати більшість таких ситуацій де можуть виникнути помилки)

AndreyI
Сообщения: 372
Зарегистрирован: 14 май 2012, 16:18

Re: Урок 60. Диалоги. AlertDialog: Title, Message, Icon, But

Сообщение AndreyI » 17 июл 2012, 13:05

Интересное решение, только логичнее будет организовать обновление статического поля не в onCreate, а в onResume. onCreate может не всегда вызываться. Но это уже мелочи, главное сам прием можно взять на вооружение. Думаю нужно как-то обобщить и разместить в наработках.

Аватара пользователя
powercat
Сообщения: 508
Зарегистрирован: 20 июл 2012, 11:31

Re: Урок 60. Диалоги. AlertDialog: Title, Message, Icon, But

Сообщение powercat » 11 сен 2012, 16:00

у меня подчеркиваются setPos, Neg, Neu и ОнКликЛистенер
Не могу скрин прикрутить, не могу найти, как это делается ((
Вот ссылка на скрин
http://zalil.ru/33742794

Аватара пользователя
powercat
Сообщения: 508
Зарегистрирован: 20 июл 2012, 11:31

Re: Урок 60. Диалоги. AlertDialog: Title, Message, Icon, But

Сообщение powercat » 11 сен 2012, 16:44

А вот так сработало (добавил DialogInterface перед OnClickListener)

Код: Выделить всё

DialogInterface.OnClickListener myClickListener=new DialogInterface.OnClickListener() {
		public void onClick(DialogInterface dialog, int which) {
			switch(which){
				case Dialog.BUTTON_POSITIVE:
					saveData();
					finish();
					break;
				case Dialog.BUTTON_NEGATIVE:
					finish();
					break;
				case Dialog.BUTTON_NEUTRAL:
					break;
			}
		}
	};
Почему так? Не сходится с уроком (((

brucemax
Сообщения: 117
Зарегистрирован: 01 апр 2012, 16:09
Откуда: Минск
Контактная информация:

Re: Урок 60. Диалоги. AlertDialog: Title, Message, Icon, But

Сообщение brucemax » 13 сен 2012, 15:51

powercat писал(а):А вот так сработало (добавил DialogInterface перед OnClickListener)

Код: Выделить всё

DialogInterface.OnClickListener myClickListener=new DialogInterface.OnClickListener() {
		public void onClick(DialogInterface dialog, int which) {
			switch(which){
				case Dialog.BUTTON_POSITIVE:
					saveData();
					finish();
					break;
				case Dialog.BUTTON_NEGATIVE:
					finish();
					break;
				case Dialog.BUTTON_NEUTRAL:
					break;
			}
		}
	};
Поддерживаю. У меня тоже самое! Спасибо за решение)

Аватара пользователя
rezak90
Сообщения: 3422
Зарегистрирован: 26 июн 2012, 13:22
Откуда: UA
Контактная информация:

Re: Урок 60. Диалоги. AlertDialog: Title, Message, Icon, But

Сообщение rezak90 » 13 сен 2012, 16:10

это просто у вас был не правильный импорт и по этому не работало, так как вы импортировали android.view.View.OnClickListener а надо было android.content.DialogInterface.OnClickListener ... внимательней нужно быть!
R.id.team
Политика на форуме запрещена

Аватара пользователя
powercat
Сообщения: 508
Зарегистрирован: 20 июл 2012, 11:31

Re: Урок 60. Диалоги. AlertDialog: Title, Message, Icon, But

Сообщение powercat » 13 сен 2012, 16:57

ээ...я просто тычу ктрлшифтО )))

Ответить