Страница 1 из 3

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

Добавлено: 27 фев 2012, 03:00
damager82
В этом уроке:

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

[url=http://www.startandroid.ru/ru/uroki/vse ... l:2lxz8x8h]Click here to read this article![/url:2lxz8x8h]

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

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

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

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

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

Добавлено: 01 мар 2012, 10:41
caliskan
спасибо. почитаю)

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?

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

Добавлено: 13 июл 2012, 17:41
damager82
Діма писал(а):Привіт, є 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.

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

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

Добавлено: 16 июл 2012, 12:17
AndreyI
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, то думаю, лучше будет использовать сервис.

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

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

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

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

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

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

П.С. программирую 2 месяца, если не прав то поправте

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

Добавлено: 17 июл 2012, 10:26
AndreyI
Диалог можно оформить как отдельную Activity и вызывать его из любого потока.

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)
В кого є краща ідея прошу пишіть на форум)

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

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

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

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

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

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

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

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

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

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

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

Добавлено: 11 сен 2012, 16:44
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;
			}
		}
	};
Почему так? Не сходится с уроком (((

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

Добавлено: 13 сен 2012, 15:51
brucemax
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;
			}
		}
	};
Поддерживаю. У меня тоже самое! Спасибо за решение)

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

Добавлено: 13 сен 2012, 16:10
rezak90
это просто у вас был не правильный импорт и по этому не работало, так как вы импортировали android.view.View.OnClickListener а надо было android.content.DialogInterface.OnClickListener ... внимательней нужно быть!

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

Добавлено: 13 сен 2012, 16:57
powercat
ээ...я просто тычу ктрлшифтО )))