Урок 60. Диалоги. AlertDialog: Title, Message, Icon, Buttons
Урок 60. Диалоги. AlertDialog: Title, Message, Icon, Buttons
В этом уроке:
- создаем AlertDialog
- настраиваем заголовок, сообщение, картинку и кнопки
[url=http://www.startandroid.ru/ru/uroki/vse ... l:2lxz8x8h]Click here to read this article![/url:2lxz8x8h]
- создаем 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 раз.
Re: Урок 60. Диалоги. AlertDialog: Title, Message, Icon, But
Здравствуйте, у меня в диалоге указывается строка adb.setMessage(str), при первом вызове диалога все показывается правильно потом str изменяется но в диалоге почему то остаются старые значения. в чем может быть проблема?
Re: Урок 60. Диалоги. AlertDialog: Title, Message, Icon, But
Как раз об этом сегодняшний урок ))caliskan писал(а):Здравствуйте, у меня в диалоге указывается строка adb.setMessage(str), при первом вызове диалога все показывается правильно потом str изменяется но в диалоге почему то остаются старые значения. в чем может быть проблема?
Re: Урок 60. Диалоги. AlertDialog: Title, Message, Icon, But
спасибо. почитаю)
Re: Урок 60. Диалоги. AlertDialog: Title, Message, Icon, But
Привіт, є 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
Этот материал смотрели? Там, в принципе, есть наводка, что нужно делать.Діма писал(а):Привіт, є 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
Что-то мне подсказывает, что так не должно работать. Здесь несколько другой случай, переход c activity2 на activity1 осуществляется пользователем нажатием на кнопку возврат и система не вызывает onRetainNonConfigurationInstance() , а других способов передачи ссылки на объекты между activity я не знаю (буду очень признателен, если кто подскажет).damager82 писал(а):
Этот материал смотрели? Там, в принципе, есть наводка, что нужно делать.
Можно вынести AsyncTask в отдельный класс и создать какое-нить static хранилище для AsyncTask, которое будет доступно для всех Activity.
Activiy2 создает задачу AsyncTask, дает ей ссылку на себя, и кладет задачу в хранилище.
Далее Activity2 закрывается, и при этом в onStop оно ссылку на себя удаляет из задачи.
Activity1 появляется, и в onStart берет из хранилища задачу AsyncTask и дает ей ссылку на себя.
Когда задача срабатывает, она работает с Activity1.
На практике не пробовал, но вроде должно сработать. Отпишитесь, потом, плз! Интересная задача.
Но проблема очень важна, т.к. это может вызывать исключения, и не проявиться на стадии тестирования. И это нужно учитывать. Я имею в виду то, что процессы порожденные 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
Я навів простий приклад з двома Activity, в мене задача складніша в мене є декілька Activity в одному із них створюється потік для виконання деякої задачі, вона займає деякий час по закінченню мені треба видати діалог, але я можу находитись в любому із можливих Activity, в цьому в мене і проблема) Дякую за допомогу AndreyI, буду пробувати сервіс. Але є бажання, подумати як зробити цю задачу через AsyncTask)
Re: Урок 60. Диалоги. AlertDialog: Title, Message, Icon, But
Broadcast Receiver попро6уй + полиморфизм
делаешь а6страктную активити (abstract, extends Activity)
дальше создаешь ресивер...
перегружаешь конструктор
наследуешь потом свои активити от этой и в нужной послаешь 6родкаст во вложенном асинктаске и во всех твоих активити 6удет диалог
П.С. программирую 2 месяца, если не прав то поправте
делаешь а6страктную активити (abstract, extends Activity)
дальше создаешь ресивер...
перегружаешь конструктор
Код: Выделить всё
@Override
public void onReceive(Context context, Intent intent) {
//тут твой диалог
}
П.С. программирую 2 месяца, если не прав то поправте
CEO of a company R.id.team
Re: Урок 60. Диалоги. AlertDialog: Title, Message, Icon, But
Диалог можно оформить как отдельную Activity и вызывать его из любого потока.
Re: Урок 60. Диалоги. AlertDialog: Title, Message, Icon, But
Я зробив так:На практике не пробовал, но вроде должно сработать. Отпишитесь, потом, плз! Интересная задача.
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
Я предложил использовать какое-нить статическое хранилище. Не onRetainNonConfigurationInstance.AndreyI писал(а):Здесь несколько другой случай, переход c activity2 на activity1 осуществляется пользователем нажатием на кнопку возврат и система не вызывает onRetainNonConfigurationInstance() , а других способов передачи ссылки на объекты между activity я не знаю (буду очень признателен, если кто подскажет).
Re: Урок 60. Диалоги. AlertDialog: Title, Message, Icon, But
Хитро) Вместо статики для AsycnTask применяем статику для Activity.Діма писал(а):Потім кожному Activity наслідую MyActivity, тоді в методі onPostExecute класу AsyncTask я можу викликати getMyContext() і показати діалог в активному Activity)
В кого є краща ідея прошу пишіть на форум)
Но надо как-то учитывать возможность того, что onPostExecute может быть вызван в момент, когда старое Activity уничтожено, а новое еще не создалось. Я седня допишу на эту тему свои мысли в уроке 91.
Re: Урок 60. Диалоги. AlertDialog: Title, Message, Icon, But
Постарайтесь описати більшість таких ситуацій де можуть виникнути помилки)Хитро) Вместо статики для AsycnTask применяем статику для Activity.
Но надо как-то учитывать возможность того, что onPostExecute может быть вызван в момент, когда старое Activity уничтожено, а новое еще не создалось. Я седня допишу на эту тему свои мысли в уроке 91.
Re: Урок 60. Диалоги. AlertDialog: Title, Message, Icon, But
Интересное решение, только логичнее будет организовать обновление статического поля не в onCreate, а в onResume. onCreate может не всегда вызываться. Но это уже мелочи, главное сам прием можно взять на вооружение. Думаю нужно как-то обобщить и разместить в наработках.
Re: Урок 60. Диалоги. AlertDialog: Title, Message, Icon, But
у меня подчеркиваются setPos, Neg, Neu и ОнКликЛистенер
Не могу скрин прикрутить, не могу найти, как это делается ((
Вот ссылка на скрин
http://zalil.ru/33742794
Не могу скрин прикрутить, не могу найти, как это делается ((
Вот ссылка на скрин
http://zalil.ru/33742794
Re: Урок 60. Диалоги. AlertDialog: Title, Message, Icon, But
А вот так сработало (добавил 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
Поддерживаю. У меня тоже самое! Спасибо за решение)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
это просто у вас был не правильный импорт и по этому не работало, так как вы импортировали android.view.View.OnClickListener а надо было android.content.DialogInterface.OnClickListener ... внимательней нужно быть!
R.id.team
Политика на форуме запрещена
Политика на форуме запрещена
Re: Урок 60. Диалоги. AlertDialog: Title, Message, Icon, But
ээ...я просто тычу ктрлшифтО )))