Страница 1 из 2
Урок 65. Диалоги. AlertDialog. Кастомизация
Добавлено: 28 мар 2012, 23:00
damager82
В этом уроке:
- используем свои View для построения диалога
[url=
http://www.startandroid.ru/ru/uroki/vse ... l:2y3kvecs]Click here to read this article![/url:2y3kvecs]
Re: Урок 65. Диалоги. AlertDialog. Кастомизация
Добавлено: 11 авг 2012, 11:11
Artemko
Хочу в диалог добавить 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. Кастомизация
Добавлено: 11 авг 2012, 22:01
math64
Почему поиск seekBar вне onCreateDialog() ? И искать нужно не в Activity, а в view
Код: Выделить всё
view = (LinearLayout) getLayoutInflater().inflate(R.layout.mana_dialog, null);
seekBar = (SeekBar) view.findViewById(R.id.Seek);
Re: Урок 65. Диалоги. AlertDialog. Кастомизация
Добавлено: 12 сен 2012, 13:58
powercat
А почему в этом уроке в конце не вызываем родителя?
А в более ранних - вызывали.
Re: Урок 65. Диалоги. AlertDialog. Кастомизация
Добавлено: 12 сен 2012, 14:27
math64
powercat писал(а):А почему в этом уроке в конце не вызываем родителя?
А в более ранних - вызывали.
Вызов кончается
- некуда вставлять.
В более ранних уроках был switch или if и super.onCreateDialog(id); вызывался, когда не попадали ни в какой вариант.
Re: Урок 65. Диалоги. AlertDialog. Кастомизация
Добавлено: 12 сен 2012, 14:55
powercat
Так вызывались оба крита...а не один...блин...как же все непонятно (((
Re: Урок 65. Диалоги. AlertDialog. Кастомизация
Добавлено: 12 сен 2012, 15:24
math64
В этом уроке в onCreateDialog() нет проверки id - поэтому метод суперкласса и не вызывается нигде.
Re: Урок 65. Диалоги. AlertDialog. Кастомизация
Добавлено: 22 сен 2012, 03:13
Xroft
Доброго времени суток!
Как в теле диалога привязать обработку своих кнопок (не стандартных - 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);
}
нужно к btnOne привязать обработчик (идея по кнопке менять значение etCnt)
в упор не могу нарыть как это сделать((((
Заранее спасибо!!!
Re: Урок 65. Диалоги. AlertDialog. Кастомизация
Добавлено: 23 сен 2012, 11:37
Xroft
Господа, подскажите, это вообще реально?)
Re: Урок 65. Диалоги. AlertDialog. Кастомизация
Добавлено: 23 сен 2012, 11:51
AndreyI
А что, так не получается?
Код: Выделить всё
btnOne.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
//Код обработки
}
});
Re: Урок 65. Диалоги. AlertDialog. Кастомизация
Добавлено: 23 сен 2012, 21:14
Xroft
AndreyI писал(а):А что, так не получается?
Код: Выделить всё
btnOne.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
//Код обработки
}
});
матерится, просит изменить onClick на
Код: Выделить всё
public void onClick(DialogInterface dialog, int which) {
// TODO Auto-generated method stub
}
посте изменения ругается, что метот setOnClickListener неможет содержать (new DialogInterface.OnClickListener() , хотя у меня (new OnClickListener()
... вобщем хз куда и как его тулить
... к слову, все это прописываю в
protected void onPrepareDialog (int id, Dialog dialog) {
Re: Урок 65. Диалоги. AlertDialog. Кастомизация
Добавлено: 23 сен 2012, 21:26
AndreyI
у вас не тот интерфейс импортировался.
замените new OnClickListener() на new android.view.View.OnClickListener()
или исправьте импорт.
Re: Урок 65. Диалоги. AlertDialog. Кастомизация
Добавлено: 24 сен 2012, 21:18
Xroft
AndreyI писал(а):замените new OnClickListener() на new android.view.View.OnClickListener()
Вот оно!!! Спасибо огромное!!!
Re: Урок 65. Диалоги. AlertDialog. Кастомизация
Добавлено: 24 сен 2012, 21:20
Xroft
Не приймите за наглость, поинтересуюсь....
Как правильно вынести диалог в отдельный класс, т к его описание занимает много места, и использоваться он будет много раз. я понимаю что это ООП. Но с диалогом в упор не понимаю как это реализовать.
Заранее спасибо
Re: Урок 65. Диалоги. AlertDialog. Кастомизация
Добавлено: 24 сен 2012, 21:58
AndreyI
Xroft писал(а):Не приймите за наглость, поинтересуюсь....
Как правильно вынести диалог в отдельный класс, т к его описание занимает много места, и использоваться он будет много раз. я понимаю что это ООП. Но с диалогом в упор не понимаю как это реализовать.
Заранее спасибо
Эти диалоги в классическом варианте встроены в Activity поэтому
проще будет использовать DialogFragment я уже приводил
пример его использования
класс MyAlert (начиная со строки 48) можно вынести в отдельный класс (ключевое слово static в этом случае можно убрать).
Re: Урок 65. Диалоги. AlertDialog. Кастомизация
Добавлено: 29 мар 2013, 09:59
Alex_sh
AndreyI писал(а):Xroft писал(а):Не приймите за наглость, поинтересуюсь....
Как правильно вынести диалог в отдельный класс, т к его описание занимает много места, и использоваться он будет много раз. я понимаю что это ООП. Но с диалогом в упор не понимаю как это реализовать.
Заранее спасибо
Эти диалоги в классическом варианте встроены в Activity поэтому
проще будет использовать DialogFragment я уже приводил
пример его использования
класс MyAlert (начиная со строки 48) можно вынести в отдельный класс (ключевое слово static в этом случае можно убрать).
У меня тот же вопрос, но если использовать DialogFragment, то мы сразу понимаем, что он работает начиная с API 11 к сожалению. Может кто может скинуть ссылку на ресурс или рассказать, как вынести код кастомного AlertDialog в отдельный класс?
Update:
Вопрос отпал. Увидел, что можно через библиотеку совместимости использовать DialogFragment.
Re: Урок 65. Диалоги. AlertDialog. Кастомизация
Добавлено: 29 мар 2013, 10:39
rezak90
но если использовать DialogFragment, то мы сразу понимаем, что он работает начиная с API 11 к сожалению
supportlibrary? не, не слышал
Re: Урок 65. Диалоги. AlertDialog. Кастомизация
Добавлено: 08 июл 2013, 19:29
assan
создаю свой диалог так
Код: Выделить всё
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? или как изменить цвет, высоту и пр. параметры?
Re: Урок 65. Диалоги. AlertDialog. Кастомизация
Добавлено: 08 июл 2013, 19:33
anber
assan писал(а):создаю свой диалог так
Код: Выделить всё
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? или как изменить цвет, высоту и пр. параметры?
Что мешает использовать AlertDialog?
конкретно от title можно избавиться так:
Код: Выделить всё
Dialog dialog = new Dialog(context);
dialog.requestWindowFeature(Window.FEATURE_NO_TITLE);
Re: Урок 65. Диалоги. AlertDialog. Кастомизация
Добавлено: 08 июл 2013, 19:58
assan
Что мешает использовать 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();
}
});
}
вверху и внизу черные полосы , видимо следы от title и места для кнопок
а это
dialog.requestWindowFeature(Window.FEATURE_NO_TITLE);
не влияет..
я взял здесь
http://www.seostella.com/ru/article/201 ... droid.html
вариант 2