Google Android - это несложно

Добро пожаловать на форум сайта startandroid.ru
Текущее время: 21 апр 2019, 02:15

Часовой пояс: UTC + 3 часа




Начать новую тему Ответить на тему  [ Сообщений: 39 ]  На страницу 1, 2  След.
Автор Сообщение
СообщениеДобавлено: 28 мар 2012, 23:00 
Администратор
Аватар пользователя

Зарегистрирован: 07 янв 2012, 11:32
Сообщений: 1400
Благодарил (а): 0 раз.
Поблагодарили: 75 раз.
В этом уроке:

- используем свои View для построения диалога

[url=http://www.startandroid.ru/ru/uroki/vse-uroki-spiskom/126-urok-65-dialogi-alertdialog-kastomizatsija.html:2y3kvecs]Click here to read this article![/url:2y3kvecs]

_________________
Добро пожаловать на форум сайта StartAndroid
ИзображениеИзображение


Последний раз редактировалось damager82 12 май 2017, 11:56, всего редактировалось 5 раз(а).

Вернуться наверх
 Профиль  
 
СообщениеДобавлено: 11 авг 2012, 11:11 

Зарегистрирован: 16 июл 2012, 15:09
Сообщений: 26
Благодарил (а): 1 раз.
Поблагодарили: 0 раз.
Хочу в диалог добавить SeekBar, делаю так:

Код: [ Загрузить ] [ Скрыть ]
Using Java Syntax Highlighting
  1.    
  2. seekBar = (SeekBar) findViewById(R.id.Seek);
  3. seekBar.setOnSeekBarChangeListener(SeekBarListener);
  4. protected Dialog onCreateDialog(int id) {
  5. if (id == DIALOG_1) {          
  6.         AlertDialog.Builder adb = new AlertDialog.Builder(this);
  7.         // создаем view из dialog.xml
  8.         view = (LinearLayout) getLayoutInflater().inflate(R.layout.mana_dialog, null);
  9.         // устанавливаем ее, как содержимое тела диалога
  10.         adb.setView(view);
  11.         // кнопка положительного ответа
  12.         adb.setPositiveButton(R.string.yes, ManaClickListener);
  13.         // кнопка отрицательного ответа
  14.         adb.setNegativeButton(R.string.no, ManaClickListener);
  15.         // кнопка нейтрального ответа
  16.         // создаем диалог
  17.         return adb.create();
  18.       }
  19.     return super.onCreateDialog(id);
  20.     }
  21.  
  22.  
  23. private SeekBar.OnSeekBarChangeListener SeekBarListener = new OnSeekBarChangeListener() {
  24.  
  25.     public void onStopTrackingTouch(SeekBar seekBar) {
  26.             //add code here
  27.     }
  28.  
  29.     public void onStartTrackingTouch(SeekBar seekBar) {
  30.             //add code here
  31.     }
  32.  
  33.     public void onProgressChanged(SeekBar seekBark, int progress, boolean fromUser) {
  34.             //add code here
  35.     }
  36.  };


Вот такая ошибка появляется:
Цитата:
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


Вернуться наверх
 Профиль  
 
СообщениеДобавлено: 11 авг 2012, 22:01 

Зарегистрирован: 16 июл 2012, 07:47
Сообщений: 235
Благодарил (а): 0 раз.
Поблагодарили: 25 раз.
Почему поиск seekBar вне onCreateDialog() ? И искать нужно не в Activity, а в view
Код: [ Загрузить ] [ Скрыть ]
Using Java Syntax Highlighting
  1. view = (LinearLayout) getLayoutInflater().inflate(R.layout.mana_dialog, null);
  2. seekBar = (SeekBar) view.findViewById(R.id.Seek);


Вернуться наверх
 Профиль  
 
СообщениеДобавлено: 12 сен 2012, 13:58 
Аватар пользователя

Зарегистрирован: 20 июл 2012, 11:31
Сообщений: 508
Благодарил (а): 0 раз.
Поблагодарили: 1 раз.
А почему в этом уроке в конце не вызываем родителя?
Код: [ Загрузить ] [ Скрыть ]
Using Java Syntax Highlighting
  1. return super.onCreateDialog(id);


А в более ранних - вызывали.


Вернуться наверх
 Профиль  
 
СообщениеДобавлено: 12 сен 2012, 14:27 

Зарегистрирован: 16 июл 2012, 07:47
Сообщений: 235
Благодарил (а): 0 раз.
Поблагодарили: 25 раз.
powercat писал(а):
А почему в этом уроке в конце не вызываем родителя?
А в более ранних - вызывали.

Вызов кончается
Код: [ Загрузить ] [ Скрыть ]
Using Java Syntax Highlighting
  1. return adb.create();
- некуда вставлять.
В более ранних уроках был switch или if и super.onCreateDialog(id); вызывался, когда не попадали ни в какой вариант.


Вернуться наверх
 Профиль  
 
СообщениеДобавлено: 12 сен 2012, 14:55 
Аватар пользователя

Зарегистрирован: 20 июл 2012, 11:31
Сообщений: 508
Благодарил (а): 0 раз.
Поблагодарили: 1 раз.
Так вызывались оба крита...а не один...блин...как же все непонятно (((


Вернуться наверх
 Профиль  
 
СообщениеДобавлено: 12 сен 2012, 15:24 

Зарегистрирован: 16 июл 2012, 07:47
Сообщений: 235
Благодарил (а): 0 раз.
Поблагодарили: 25 раз.
В этом уроке в onCreateDialog() нет проверки id - поэтому метод суперкласса и не вызывается нигде.


Вернуться наверх
 Профиль  
 
СообщениеДобавлено: 22 сен 2012, 03:13 
Аватар пользователя

Зарегистрирован: 10 май 2012, 10:11
Сообщений: 38
Благодарил (а): 0 раз.
Поблагодарили: 0 раз.
Доброго времени суток!
Как в теле диалога привязать обработку своих кнопок (не стандартных - setPositiveButton, setNegativeButton), а именно саморучно нарисованных

Код: [ Загрузить ] [ Скрыть ]
Using Java Syntax Highlighting
  1. protected Dialog onCreateDialog(int id) {
  2.                 AlertDialog.Builder adb = new AlertDialog.Builder(MyClass.this);
  3.             view = (LinearLayout) getLayoutInflater()
  4.                     .inflate(R.layout.dialog_add_cnt, null);
  5.  
  6.                 adb.setTitle("ЗЛОЙ Заголовок");
  7.                 adb.setView(view);
  8.                 adb.setPositiveButton(R.string.btnOk, myClickListener);
  9.              return adb.create();
  10.                 }
  11.        
  12.                 protected void onPrepareDialog (int id, Dialog dialog) {
  13.                         super.onPrepareDialog(id, dialog);
  14.                         TextView tv1 = (TextView) dialog.getWindow().findViewById(R.id.tv1);
  15.                         tv1.setText(cg.getString(2));
  16.                         //Имя товара
  17.                         TextView tv2 = (TextView) dialog.getWindow().findViewById(R.id.tv2);
  18.                         tv2.setText(cg.getString(3));
  19.                         EditText etCnt = (EditText) ((Dialog) dialog).getWindow().findViewById(R.id.etCnt)
  20.                         Button btnOne = (Button) dialog.getWindow().findViewById(R.id.btnOne);
  21.                 }

нужно к btnOne привязать обработчик (идея по кнопке менять значение etCnt)
в упор не могу нарыть как это сделать((((

Заранее спасибо!!!


Вернуться наверх
 Профиль  
 
СообщениеДобавлено: 23 сен 2012, 11:37 
Аватар пользователя

Зарегистрирован: 10 май 2012, 10:11
Сообщений: 38
Благодарил (а): 0 раз.
Поблагодарили: 0 раз.
Господа, подскажите, это вообще реально?)


Вернуться наверх
 Профиль  
 
СообщениеДобавлено: 23 сен 2012, 11:51 

Зарегистрирован: 14 май 2012, 16:18
Сообщений: 372
Благодарил (а): 0 раз.
Поблагодарили: 6 раз.
А что, так не получается?
Код: [ Загрузить ] [ Скрыть ]
Using Java Syntax Highlighting
  1. btnOne.setOnClickListener(new OnClickListener() {                      
  2.                         @Override
  3.                         public void onClick(View v) {
  4.                                
  5.                                 //Код обработки
  6.                         }
  7.                 });


Вернуться наверх
 Профиль  
 
СообщениеДобавлено: 23 сен 2012, 21:14 
Аватар пользователя

Зарегистрирован: 10 май 2012, 10:11
Сообщений: 38
Благодарил (а): 0 раз.
Поблагодарили: 0 раз.
AndreyI писал(а):
А что, так не получается?
Код: [ Загрузить ] [ Скрыть ]
Using Java Syntax Highlighting
  1. btnOne.setOnClickListener(new OnClickListener() {                      
  2.                         @Override
  3.                         public void onClick(View v) {
  4.                                
  5.                                 //Код обработки
  6.                         }
  7.                 });

матерится, просит изменить onClick на
Код: [ Загрузить ] [ Скрыть ]
Using Java Syntax Highlighting
  1. public void onClick(DialogInterface dialog, int which) {
  2.                                         // TODO Auto-generated method stub
  3.                                        
  4.                                 }

посте изменения ругается, что метот setOnClickListener неможет содержать (new DialogInterface.OnClickListener() , хотя у меня (new OnClickListener()
... вобщем хз куда и как его тулить
... к слову, все это прописываю в protected void onPrepareDialog (int id, Dialog dialog) {


Вернуться наверх
 Профиль  
 
СообщениеДобавлено: 23 сен 2012, 21:26 

Зарегистрирован: 14 май 2012, 16:18
Сообщений: 372
Благодарил (а): 0 раз.
Поблагодарили: 6 раз.
у вас не тот интерфейс импортировался.
замените new OnClickListener() на new android.view.View.OnClickListener()
или исправьте импорт.


Вернуться наверх
 Профиль  
 
СообщениеДобавлено: 24 сен 2012, 21:18 
Аватар пользователя

Зарегистрирован: 10 май 2012, 10:11
Сообщений: 38
Благодарил (а): 0 раз.
Поблагодарили: 0 раз.
AndreyI писал(а):
замените new OnClickListener() на new android.view.View.OnClickListener()


Вот оно!!! Спасибо огромное!!!


Вернуться наверх
 Профиль  
 
СообщениеДобавлено: 24 сен 2012, 21:20 
Аватар пользователя

Зарегистрирован: 10 май 2012, 10:11
Сообщений: 38
Благодарил (а): 0 раз.
Поблагодарили: 0 раз.
Не приймите за наглость, поинтересуюсь....
Как правильно вынести диалог в отдельный класс, т к его описание занимает много места, и использоваться он будет много раз. я понимаю что это ООП. Но с диалогом в упор не понимаю как это реализовать.
Заранее спасибо


Вернуться наверх
 Профиль  
 
СообщениеДобавлено: 24 сен 2012, 21:58 

Зарегистрирован: 14 май 2012, 16:18
Сообщений: 372
Благодарил (а): 0 раз.
Поблагодарили: 6 раз.
Xroft писал(а):
Не приймите за наглость, поинтересуюсь....
Как правильно вынести диалог в отдельный класс, т к его описание занимает много места, и использоваться он будет много раз. я понимаю что это ООП. Но с диалогом в упор не понимаю как это реализовать.
Заранее спасибо

Эти диалоги в классическом варианте встроены в Activity поэтому
проще будет использовать DialogFragment я уже приводил пример его использования
класс MyAlert (начиная со строки 48) можно вынести в отдельный класс (ключевое слово static в этом случае можно убрать).


Вернуться наверх
 Профиль  
 
СообщениеДобавлено: 29 мар 2013, 09:59 

Зарегистрирован: 04 фев 2013, 12:10
Сообщений: 9
Благодарил (а): 0 раз.
Поблагодарили: 0 раз.
AndreyI писал(а):
Xroft писал(а):
Не приймите за наглость, поинтересуюсь....
Как правильно вынести диалог в отдельный класс, т к его описание занимает много места, и использоваться он будет много раз. я понимаю что это ООП. Но с диалогом в упор не понимаю как это реализовать.
Заранее спасибо

Эти диалоги в классическом варианте встроены в Activity поэтому
проще будет использовать DialogFragment я уже приводил пример его использования
класс MyAlert (начиная со строки 48) можно вынести в отдельный класс (ключевое слово static в этом случае можно убрать).


У меня тот же вопрос, но если использовать DialogFragment, то мы сразу понимаем, что он работает начиная с API 11 к сожалению. Может кто может скинуть ссылку на ресурс или рассказать, как вынести код кастомного AlertDialog в отдельный класс?

Update:
Вопрос отпал. Увидел, что можно через библиотеку совместимости использовать DialogFragment.


Вернуться наверх
 Профиль  
 
СообщениеДобавлено: 29 мар 2013, 10:39 
Аватар пользователя

Зарегистрирован: 26 июн 2012, 13:22
Сообщений: 3422
Откуда: UA
Благодарил (а): 11 раз.
Поблагодарили: 244 раз.
Цитата:
но если использовать DialogFragment, то мы сразу понимаем, что он работает начиная с API 11 к сожалению

supportlibrary? не, не слышал :roll:

_________________
R.id.team
Политика на форуме запрещена


Вернуться наверх
 Профиль  
 
СообщениеДобавлено: 08 июл 2013, 19:29 

Зарегистрирован: 24 мар 2013, 22:31
Сообщений: 48
Благодарил (а): 0 раз.
Поблагодарили: 0 раз.
создаю свой диалог так
Код: [ Загрузить ] [ Скрыть ]
  1. public class DialogQuantity { 
  2.     private Dialog dialog; 
  3.     private Activity activity; 
  4.     private NumberPicker numberPicker; 
  5.     private dishFrameView di; 
  6.  
  7.     public DialogQuantity(Activity activity) { 
  8.         this.activity = activity; 
  9.         init(); 
  10.     } 
  11.  
  12.     private void init() { 
  13.         dialog = new Dialog(this.activity); 
  14.         dialog.setContentView(R.layout.dialog_quantity); 
  15.         Button button_ok = (Button) dialog.findViewById(R.id.button_ok); 
  16.         button_ok.setOnClickListener(new View.OnClickListener() { 
  17.             @Override 
  18.             public void onClick(View view) { 
  19.                 dialog.dismiss(); 
  20.             } 
  21.         }); 
  22.     } 
  23.  
  24.     public void show(diFrameView di) { 
  25.         this.di = di; 
  26.         dialog.show(); 
  27.     } 

всё создается , но как избавиться от title? или как изменить цвет, высоту и пр. параметры?


Вернуться наверх
 Профиль  
 
СообщениеДобавлено: 08 июл 2013, 19:33 
Аватар пользователя

Зарегистрирован: 10 июн 2013, 15:05
Сообщений: 584
Откуда: UA
Благодарил (а): 14 раз.
Поблагодарили: 74 раз.
assan писал(а):
создаю свой диалог так
Код: [ Загрузить ] [ Скрыть ]
  1. public class DialogQuantity { 
  2.     private Dialog dialog; 
  3.     private Activity activity; 
  4.     private NumberPicker numberPicker; 
  5.     private dishFrameView di; 
  6.  
  7.     public DialogQuantity(Activity activity) { 
  8.         this.activity = activity; 
  9.         init(); 
  10.     } 
  11.  
  12.     private void init() { 
  13.         dialog = new Dialog(this.activity); 
  14.         dialog.setContentView(R.layout.dialog_quantity); 
  15.         Button button_ok = (Button) dialog.findViewById(R.id.button_ok); 
  16.         button_ok.setOnClickListener(new View.OnClickListener() { 
  17.             @Override 
  18.             public void onClick(View view) { 
  19.                 dialog.dismiss(); 
  20.             } 
  21.         }); 
  22.     } 
  23.  
  24.     public void show(diFrameView di) { 
  25.         this.di = di; 
  26.         dialog.show(); 
  27.     } 

всё создается , но как избавиться от title? или как изменить цвет, высоту и пр. параметры?


Что мешает использовать AlertDialog?
конкретно от title можно избавиться так:
Код: [ Загрузить ] [ Скрыть ]
  1. Dialog dialog = new Dialog(context); 
  2. dialog.requestWindowFeature(Window.FEATURE_NO_TITLE); 

_________________
Личные сообщения с просьбой ответить на форуме или написать программу я просто удаляю, если я в хорошем настроении. Если в плохом добавляю автора в черный список. По любым другим вопросам feel free to write to me.


Вернуться наверх
 Профиль  
 
СообщениеДобавлено: 08 июл 2013, 19:58 

Зарегистрирован: 24 мар 2013, 22:31
Сообщений: 48
Благодарил (а): 0 раз.
Поблагодарили: 0 раз.
Цитата:
Что мешает использовать AlertDialog?

ничего,
теперь делаю так
Код: [ Загрузить ] [ Скрыть ]
  1. private void init(){ 
  2.         LayoutInflater inflater = LayoutInflater.from( this.activity ); 
  3.         View layout = inflater.inflate(R.layout.dialog_quantity, null); 
  4.         AlertDialog.Builder builder = new AlertDialog.Builder( this.activity ); 
  5.         builder.setView(layout); 
  6.         dialog = builder.create(); 
  7.       //  dialog.setTitle("Custom dialog title"); 
  8.         dialog.requestWindowFeature(Window.FEATURE_NO_TITLE); 
  9.         Button button_ok = (Button) layout.findViewById(R.id.button_ok); 
  10.         button_ok.setOnClickListener(new View.OnClickListener() { 
  11.             @Override 
  12.             public void onClick(View view) { 
  13.                 dialog.dismiss(); 
  14.             } 
  15.         }); 
  16.  
  17.     } 

вверху и внизу черные полосы , видимо следы от title и места для кнопок
а это
dialog.requestWindowFeature(Window.FEATURE_NO_TITLE);
не влияет..


я взял здесь http://www.seostella.com/ru/article/201 ... droid.html
вариант 2


Вернуться наверх
 Профиль  
 
Показать сообщения за:  Сортировать по:  
Начать новую тему Ответить на тему  [ Сообщений: 39 ]  На страницу 1, 2  След.

Часовой пояс: UTC + 3 часа


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Powered by phpBB® Forum Software © phpBB Group
Русская поддержка phpBB