Урок 65. Диалоги. AlertDialog. Кастомизация
Урок 65. Диалоги. AlertDialog. Кастомизация
В этом уроке:
- используем свои View для построения диалога
[url=http://www.startandroid.ru/ru/uroki/vse ... l:2y3kvecs]Click here to read this article![/url:2y3kvecs]
- используем свои View для построения диалога
[url=http://www.startandroid.ru/ru/uroki/vse ... l:2y3kvecs]Click here to read this article![/url:2y3kvecs]
Последний раз редактировалось damager82 12 май 2017, 11:56, всего редактировалось 5 раз.
Re: Урок 65. Диалоги. AlertDialog. Кастомизация
Хочу в диалог добавить SeekBar, делаю так:
Вот такая ошибка появляется:
Код: Выделить всё
seekBar = (SeekBar) findViewById(R.id.Seek);
seekBar.setOnSeekBarChangeListener(SeekBarListener);
protected Dialog onCreateDialog(int id) {
if (id == DIALOG_1) {
AlertDialog.Builder adb = new AlertDialog.Builder(this);
// создаем view из dialog.xml
view = (LinearLayout) getLayoutInflater().inflate(R.layout.mana_dialog, null);
// устанавливаем ее, как содержимое тела диалога
adb.setView(view);
// кнопка положительного ответа
adb.setPositiveButton(R.string.yes, ManaClickListener);
// кнопка отрицательного ответа
adb.setNegativeButton(R.string.no, ManaClickListener);
// кнопка нейтрального ответа
// создаем диалог
return adb.create();
}
return super.onCreateDialog(id);
}
private SeekBar.OnSeekBarChangeListener SeekBarListener = new OnSeekBarChangeListener() {
public void onStopTrackingTouch(SeekBar seekBar) {
//add code here
}
public void onStartTrackingTouch(SeekBar seekBar) {
//add code here
}
public void onProgressChanged(SeekBar seekBark, int progress, boolean fromUser) {
//add code here
}
};
08-10 16:48:06.423: E/AndroidRuntime(3318): FATAL EXCEPTION: main
08-10 16:48:06.423: E/AndroidRuntime(3318): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.aero.recept1/com.aero.recept1.MainActivity}: java.lang.NullPointerException
08-10 16:48:06.423: E/AndroidRuntime(3318): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1834)
08-10 16:48:06.423: E/AndroidRuntime(3318): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1850)
08-10 16:48:06.423: E/AndroidRuntime(3318): at android.app.ActivityThread.access$1500(ActivityThread.java:125)
08-10 16:48:06.423: E/AndroidRuntime(3318): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:941)
08-10 16:48:06.423: E/AndroidRuntime(3318): at android.os.Handler.dispatchMessage(Handler.java:99)
08-10 16:48:06.423: E/AndroidRuntime(3318): at android.os.Looper.loop(Looper.java:130)
08-10 16:48:06.423: E/AndroidRuntime(3318): at android.app.ActivityThread.main(ActivityThread.java:3935)
08-10 16:48:06.423: E/AndroidRuntime(3318): at java.lang.reflect.Method.invokeNative(Native Method)
08-10 16:48:06.423: E/AndroidRuntime(3318): at java.lang.reflect.Method.invoke(Method.java:507)
08-10 16:48:06.423: E/AndroidRuntime(3318): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:864)
08-10 16:48:06.423: E/AndroidRuntime(3318): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:622)
08-10 16:48:06.423: E/AndroidRuntime(3318): at dalvik.system.NativeStart.main(Native Method)
08-10 16:48:06.423: E/AndroidRuntime(3318): Caused by: java.lang.NullPointerException
08-10 16:48:06.423: E/AndroidRuntime(3318): at com.aero.recept1.MainActivity.onCreate(MainActivity.java:58)
08-10 16:48:06.423: E/AndroidRuntime(3318): at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1047)
08-10 16:48:06.423: E/AndroidRuntime(3318): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1788)
08-10 16:48:06.423: E/AndroidRuntime(3318): ... 11 more
Re: Урок 65. Диалоги. AlertDialog. Кастомизация
Почему поиск seekBar вне onCreateDialog() ? И искать нужно не в Activity, а в view
Код: Выделить всё
view = (LinearLayout) getLayoutInflater().inflate(R.layout.mana_dialog, null);
seekBar = (SeekBar) view.findViewById(R.id.Seek);
Re: Урок 65. Диалоги. AlertDialog. Кастомизация
А почему в этом уроке в конце не вызываем родителя?
А в более ранних - вызывали.
Код: Выделить всё
return super.onCreateDialog(id);
Re: Урок 65. Диалоги. AlertDialog. Кастомизация
Вызов кончаетсяpowercat писал(а):А почему в этом уроке в конце не вызываем родителя?
А в более ранних - вызывали.
Код: Выделить всё
return adb.create();
В более ранних уроках был switch или if и super.onCreateDialog(id); вызывался, когда не попадали ни в какой вариант.
Re: Урок 65. Диалоги. AlertDialog. Кастомизация
Так вызывались оба крита...а не один...блин...как же все непонятно (((
Re: Урок 65. Диалоги. AlertDialog. Кастомизация
В этом уроке в onCreateDialog() нет проверки id - поэтому метод суперкласса и не вызывается нигде.
Re: Урок 65. Диалоги. AlertDialog. Кастомизация
Доброго времени суток!
Как в теле диалога привязать обработку своих кнопок (не стандартных - setPositiveButton, setNegativeButton), а именно саморучно нарисованных
нужно к btnOne привязать обработчик (идея по кнопке менять значение etCnt)
в упор не могу нарыть как это сделать((((
Заранее спасибо!!!
Как в теле диалога привязать обработку своих кнопок (не стандартных - setPositiveButton, setNegativeButton), а именно саморучно нарисованных
Код: Выделить всё
protected Dialog onCreateDialog(int id) {
AlertDialog.Builder adb = new AlertDialog.Builder(MyClass.this);
view = (LinearLayout) getLayoutInflater()
.inflate(R.layout.dialog_add_cnt, null);
adb.setTitle("ЗЛОЙ Заголовок");
adb.setView(view);
adb.setPositiveButton(R.string.btnOk, myClickListener);
return adb.create();
}
protected void onPrepareDialog (int id, Dialog dialog) {
super.onPrepareDialog(id, dialog);
TextView tv1 = (TextView) dialog.getWindow().findViewById(R.id.tv1);
tv1.setText(cg.getString(2));
//Имя товара
TextView tv2 = (TextView) dialog.getWindow().findViewById(R.id.tv2);
tv2.setText(cg.getString(3));
EditText etCnt = (EditText) ((Dialog) dialog).getWindow().findViewById(R.id.etCnt)
Button btnOne = (Button) dialog.getWindow().findViewById(R.id.btnOne);
}
в упор не могу нарыть как это сделать((((
Заранее спасибо!!!
Re: Урок 65. Диалоги. AlertDialog. Кастомизация
Господа, подскажите, это вообще реально?)
Re: Урок 65. Диалоги. AlertDialog. Кастомизация
А что, так не получается?
Код: Выделить всё
btnOne.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
//Код обработки
}
});
Re: Урок 65. Диалоги. AlertDialog. Кастомизация
матерится, просит изменить onClick наAndreyI писал(а):А что, так не получается?Код: Выделить всё
btnOne.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { //Код обработки } });
Код: Выделить всё
public void onClick(DialogInterface dialog, int which) {
// TODO Auto-generated method stub
}
... вобщем хз куда и как его тулить
... к слову, все это прописываю в protected void onPrepareDialog (int id, Dialog dialog) {
Re: Урок 65. Диалоги. AlertDialog. Кастомизация
у вас не тот интерфейс импортировался.
замените new OnClickListener() на new android.view.View.OnClickListener()
или исправьте импорт.
замените new OnClickListener() на new android.view.View.OnClickListener()
или исправьте импорт.
Re: Урок 65. Диалоги. AlertDialog. Кастомизация
Вот оно!!! Спасибо огромное!!!AndreyI писал(а):замените new OnClickListener() на new android.view.View.OnClickListener()
Re: Урок 65. Диалоги. AlertDialog. Кастомизация
Не приймите за наглость, поинтересуюсь....
Как правильно вынести диалог в отдельный класс, т к его описание занимает много места, и использоваться он будет много раз. я понимаю что это ООП. Но с диалогом в упор не понимаю как это реализовать.
Заранее спасибо
Как правильно вынести диалог в отдельный класс, т к его описание занимает много места, и использоваться он будет много раз. я понимаю что это ООП. Но с диалогом в упор не понимаю как это реализовать.
Заранее спасибо
Re: Урок 65. Диалоги. AlertDialog. Кастомизация
Эти диалоги в классическом варианте встроены в Activity поэтомуXroft писал(а):Не приймите за наглость, поинтересуюсь....
Как правильно вынести диалог в отдельный класс, т к его описание занимает много места, и использоваться он будет много раз. я понимаю что это ООП. Но с диалогом в упор не понимаю как это реализовать.
Заранее спасибо
проще будет использовать DialogFragment я уже приводил пример его использования
класс MyAlert (начиная со строки 48) можно вынести в отдельный класс (ключевое слово static в этом случае можно убрать).
Re: Урок 65. Диалоги. AlertDialog. Кастомизация
У меня тот же вопрос, но если использовать DialogFragment, то мы сразу понимаем, что он работает начиная с API 11 к сожалению. Может кто может скинуть ссылку на ресурс или рассказать, как вынести код кастомного AlertDialog в отдельный класс?AndreyI писал(а):Эти диалоги в классическом варианте встроены в Activity поэтомуXroft писал(а):Не приймите за наглость, поинтересуюсь....
Как правильно вынести диалог в отдельный класс, т к его описание занимает много места, и использоваться он будет много раз. я понимаю что это ООП. Но с диалогом в упор не понимаю как это реализовать.
Заранее спасибо
проще будет использовать DialogFragment я уже приводил пример его использования
класс MyAlert (начиная со строки 48) можно вынести в отдельный класс (ключевое слово static в этом случае можно убрать).
Update:
Вопрос отпал. Увидел, что можно через библиотеку совместимости использовать DialogFragment.
Re: Урок 65. Диалоги. AlertDialog. Кастомизация
supportlibrary? не, не слышално если использовать DialogFragment, то мы сразу понимаем, что он работает начиная с API 11 к сожалению
R.id.team
Политика на форуме запрещена
Политика на форуме запрещена
Re: Урок 65. Диалоги. AlertDialog. Кастомизация
создаю свой диалог так
всё создается , но как избавиться от title? или как изменить цвет, высоту и пр. параметры?
Код: Выделить всё
public class DialogQuantity {
private Dialog dialog;
private Activity activity;
private NumberPicker numberPicker;
private dishFrameView di;
public DialogQuantity(Activity activity) {
this.activity = activity;
init();
}
private void init() {
dialog = new Dialog(this.activity);
dialog.setContentView(R.layout.dialog_quantity);
Button button_ok = (Button) dialog.findViewById(R.id.button_ok);
button_ok.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
dialog.dismiss();
}
});
}
public void show(diFrameView di) {
this.di = di;
dialog.show();
}
}
Re: Урок 65. Диалоги. AlertDialog. Кастомизация
Что мешает использовать AlertDialog?assan писал(а):создаю свой диалог таквсё создается , но как избавиться от title? или как изменить цвет, высоту и пр. параметры?Код: Выделить всё
public class DialogQuantity { private Dialog dialog; private Activity activity; private NumberPicker numberPicker; private dishFrameView di; public DialogQuantity(Activity activity) { this.activity = activity; init(); } private void init() { dialog = new Dialog(this.activity); dialog.setContentView(R.layout.dialog_quantity); Button button_ok = (Button) dialog.findViewById(R.id.button_ok); button_ok.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { dialog.dismiss(); } }); } public void show(diFrameView di) { this.di = di; dialog.show(); } }
конкретно от title можно избавиться так:
Код: Выделить всё
Dialog dialog = new Dialog(context);
dialog.requestWindowFeature(Window.FEATURE_NO_TITLE);
Личные сообщения с просьбой ответить на форуме или написать программу я просто удаляю, если я в хорошем настроении. Если в плохом добавляю автора в черный список. По любым другим вопросам feel free to write to me.
Re: Урок 65. Диалоги. AlertDialog. Кастомизация
ничего,Что мешает использовать AlertDialog?
теперь делаю так
Код: Выделить всё
private void init(){
LayoutInflater inflater = LayoutInflater.from( this.activity );
View layout = inflater.inflate(R.layout.dialog_quantity, null);
AlertDialog.Builder builder = new AlertDialog.Builder( this.activity );
builder.setView(layout);
dialog = builder.create();
// dialog.setTitle("Custom dialog title");
dialog.requestWindowFeature(Window.FEATURE_NO_TITLE);
Button button_ok = (Button) layout.findViewById(R.id.button_ok);
button_ok.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
dialog.dismiss();
}
});
}
а это
dialog.requestWindowFeature(Window.FEATURE_NO_TITLE);
не влияет..
я взял здесь http://www.seostella.com/ru/article/201 ... droid.html
вариант 2