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

Добро пожаловать на форум сайта startandroid.ru
Текущее время: 24 апр 2017, 05:39

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




Начать новую тему Ответить на тему  [ Сообщений: 11 ] 
Автор Сообщение
СообщениеДобавлено: 01 мар 2012, 04:00 
Администратор
Аватар пользователя

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

- используем метод подготовки диалога

Click here to read this article!

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


Последний раз редактировалось damager82 23 июн 2016, 22:18, всего редактировалось 11 раз(а).

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

Зарегистрирован: 16 июл 2012, 08:47
Сообщений: 235
Благодарил (а): 0 раз.
Поблагодарили: 25 раз.
Поскольку onPrepareDialog() вызывается после onCreateDialog(), в onCreateDialog() можно не делать setMessage().
У меня надпись не изменялась, пока не убрал (Samsung GT-I9003, 2.3.5).


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

Зарегистрирован: 07 янв 2012, 12:32
Сообщений: 1323
Благодарил (а): 0 раз.
Поблагодарили: 72 раз.
math64 писал(а):
Поскольку onPrepareDialog() вызывается после onCreateDialog(), в onCreateDialog() можно не делать setMessage().
У меня надпись не изменялась, пока не убрал (Samsung GT-I9003, 2.3.5).


Т.е. при каждом запуске висело время, которое прописалось в onCreateDialog?

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


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

Зарегистрирован: 16 июл 2012, 08:47
Сообщений: 235
Благодарил (а): 0 раз.
Поблагодарили: 25 раз.
В своей программе, но так как в уроке. Текст - "Вы выиграли" или "Вы проиграли". Что было первым, то потом и показывается.
Если сделать точно по уроку - работает правильно, время изменяется.


Вернуться наверх
 Профиль  
 
СообщениеДобавлено: 08 авг 2012, 16:54 
Аватар пользователя

Зарегистрирован: 13 янв 2012, 18:56
Сообщений: 219
Благодарил (а): 3 раз.
Поблагодарили: 6 раз.
Подскажите, как в onPrepareDialog() изменить items для AlertDialog'а ?
Ведь они указываются через builder, который затем возвращает AlertDialog посредством create()


Вернуться наверх
 Профиль  
 
СообщениеДобавлено: 08 авг 2012, 17:25 
Аватар пользователя

Зарегистрирован: 13 янв 2012, 18:56
Сообщений: 219
Благодарил (а): 3 раз.
Поблагодарили: 6 раз.
Нашел вот такой способ, не по феншую, конечно, но работает железно.

Код: [ Загрузить ] [ Скрыть ]
Using Java Syntax Highlighting
  1. private final int DIALOG_ID = 1;
  2. private Activity activity;
  3. ...
  4. activity.removeDialog(DIALOG_ID);
  5. showDialog(DIALOG_ID);
  6.  


все еще буду рад услышать правильный вариант через onPrepareDialog.
что-то близкое изложено здесь: http://stackoverflow.com/questions/4984 ... paredialog


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

Зарегистрирован: 16 июл 2012, 08:47
Сообщений: 235
Благодарил (а): 0 раз.
Поблагодарили: 25 раз.
andev писал(а):
Подскажите, как в onPrepareDialog() изменить items для AlertDialog'а ?
Ведь они указываются через builder, который затем возвращает AlertDialog посредством create()

У AlertDialog'а можно достать ListView. У ListView - адаптер. Пиши свой адаптер (см. уроки по ListView и адаптерам) и скармливай адаптер билдеру вместо массива или списка items.


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

Зарегистрирован: 13 янв 2012, 18:56
Сообщений: 219
Благодарил (а): 3 раз.
Поблагодарили: 6 раз.
вроде понял, попробую. Спасибо


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

Зарегистрирован: 17 апр 2013, 00:55
Сообщений: 28
Благодарил (а): 1 раз.
Поблагодарили: 0 раз.
Добрый день!
Я как запоздалый пассажир, запрыгнул некоторое время назад в проходящий поезд и на фоне остальных лишь сейчас дошел до 61-го урока. Его мне захотелось "интерактивно" видоизменить. И вот, что получилось:
Код: [ Загрузить ] [ Скрыть ]
Using Java Syntax Highlighting
  1. package ru.startandroid.develop.p0611alertdialogprepare;
  2.  
  3. import java.sql.Date;
  4. import java.text.SimpleDateFormat;
  5. import java.util.Timer;
  6. import java.util.TimerTask;
  7.  
  8. import android.app.Activity;
  9. import android.app.AlertDialog;
  10. import android.app.Dialog;
  11. import android.os.Bundle;
  12. import android.os.Handler;
  13. import android.util.Log;
  14. import android.view.View;
  15.  
  16. public class MainActivity extends Activity {
  17.         final static String LOG_TAG = "myLogs";
  18.         final int DIALOG = 1;
  19.         AlertDialog dialog;
  20.         SimpleDateFormat sdf = new SimpleDateFormat("HH:mm:ss");
  21.  
  22.         /** Called when the activity is first created. */
  23.         @Override
  24.         public void onCreate(Bundle savedInstanceState) {
  25.                 super.onCreate(savedInstanceState);
  26.                 setContentView(R.layout.main);
  27.         }
  28.  
  29.         public void onclick(View v) {
  30.                 showDialog(DIALOG);
  31.         }
  32.  
  33.         protected Dialog onCreateDialog(int id) {
  34.                 Log.d(LOG_TAG, "onCreateDialog");
  35.                 if (id == DIALOG) {
  36.                         AlertDialog.Builder adb = new AlertDialog.Builder(this);
  37.                         adb.setTitle("Текущее время");
  38.                         adb.setMessage("");
  39.                         dialog = adb.create();
  40.                         final Handler uiHandler = new Handler();
  41.                         Timer tm = new Timer();
  42.                         tm.schedule(new TimerTask() {
  43.                                 @Override
  44.                                 public void run() {
  45.                                         uiHandler.post(new Runnable() {
  46.                                     @Override
  47.                                     public void run() {
  48.                                         dialog.setMessage(sdf.format(new Date(System
  49.                                                                         .currentTimeMillis())));
  50.                                     }
  51.                                 });
  52.                                 }
  53.                         }, 0L, 1000);
  54.                         //adb.setMessage(sdf.format(new Date(System.currentTimeMillis())));
  55.  
  56.                         return dialog;
  57.                 }
  58.                 return super.onCreateDialog(id);
  59.         }
  60.  
  61.         protected void onPrepareDialog(int id, Dialog dialog) {
  62.                 super.onPrepareDialog(id, dialog);
  63.                 Log.d(LOG_TAG, "onPrepareDialog");
  64.                 /*if (id == DIALOG) {
  65.                         ((AlertDialog) dialog).setMessage(sdf.format(new Date(System
  66.                                         .currentTimeMillis())));
  67.                 }*/
  68.         }
  69. }
  70.  


И теперь, возможно и не в тему, но вопрос: У меня почему то время запущенное таймером на эмуляторе отстаёт от системного времени моего компа на 1.3 секунды. Это нормальное явление или я где-то наговнокодил?


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

Зарегистрирован: 13 ноя 2013, 15:46
Сообщений: 1956
Благодарил (а): 10 раз.
Поблагодарили: 275 раз.
onCreateDialog был объявлен как depricated в API level 13 (API level 13 вышла 15 July 2011)

_________________
Изображение


Вернуться наверх
 Профиль  
 
СообщениеДобавлено: 28 сен 2015, 13:01 

Зарегистрирован: 28 сен 2015, 12:53
Сообщений: 4
Благодарил (а): 0 раз.
Поблагодарили: 1 раз.
Я бы отметил, что на сегодня этот вызов диалога showDialog @deprecated устарел и следует использовать DialogFragment вместо него.
При этом функция этого метода onCreateDialog вызывается каждый раз перед отображением окна диалога, так что onPrepareDialog() не актуальна.

Ну и актуальный код для работы с DialogFragment:
Код: [ Загрузить ] [ Скрыть ]
  1. package ua.com.webtuning.startandroid; 
  2.  
  3. import android.app.AlertDialog; 
  4. import android.app.Dialog; 
  5. import android.app.DialogFragment; //Важно этот класс!!! 
  6. import android.content.DialogInterface; 
  7. import android.os.Bundle; 
  8. import android.util.Log; 
  9.  
  10. public class MyAlertDialogFragment extends DialogFragment { 
  11.  
  12.     public static MyAlertDialogFragment newInstance(int title) { 
  13.         MyAlertDialogFragment frag = new MyAlertDialogFragment(); 
  14.         Bundle args = new Bundle(); 
  15.         args.putInt("title", title); 
  16.         frag.setArguments(args); 
  17.         return frag; 
  18.     } 
  19.  
  20.     @Override 
  21.     public Dialog onCreateDialog(Bundle savedInstanceState) { 
  22.         int title = getArguments().getInt("title"); 
  23.  
  24.         Log.d("myLogs","Create Dialog Fragment"); 
  25.         return new AlertDialog.Builder(getActivity()) 
  26.                 .setIcon(R.mipmap.ic_launcher) 
  27.                 .setTitle(title) 
  28.                 .setPositiveButton(R.string.alert_dialog_ok, 
  29.                         new DialogInterface.OnClickListener() { 
  30.                             public void onClick(DialogInterface dialog, int whichButton) { 
  31.                                 ((MainActivity) getActivity()).doPositiveClick(); 
  32.                             } 
  33.                         } 
  34.                 ) 
  35.                 .setNegativeButton(R.string.alert_dialog_cancel, 
  36.                         new DialogInterface.OnClickListener() { 
  37.                             public void onClick(DialogInterface dialog, int whichButton) { 
  38.                                 ((MainActivity) getActivity()).doNegativeClick(); 
  39.                             } 
  40.                         } 
  41.                 ) 
  42.                 .setNeutralButton(R.string.alert_neutral_buttom, new DialogInterface.OnClickListener() { 
  43.                     @Override 
  44.                     public void onClick(DialogInterface dialog, int which) { 
  45.                         ((MainActivity) getActivity()).doNeutralClick(); 
  46.  
  47.                     } 
  48.                 }) 
  49.                 .create(); 
  50.     } 
  51.  

Код: [ Загрузить ] [ Скрыть ]
  1. <resources> 
  2.     <string name="alert_dialog_ok">Ok</string> 
  3.     <string name="alert_dialog_cancel">Cancel</string> 
  4.     <string name="alert_two_buttons_title">Dialog Tow Buttons</string> 
  5.     <string name="alert_neutral_buttom">Neutral</string> 
  6. </resources> 

И в главную добавить:
Код: [ Загрузить ] [ Скрыть ]
  1.     public void onclick(View view) { 
  2.         if (view.getId() == R.id.tvFragment) { 
  3.             DialogFragment newFragment = 
  4.                     MyAlertDialogFragment.newInstance(R.string.alert_two_buttons_title); 
  5.             newFragment.show(getFragmentManager(), "myDialogFragment"); 
  6.         } 
  7.     } 
  8.     public void doPositiveClick() { 
  9.         Toast.makeText(MainActivity.this, "Вы выбрали кнопку OK!", 
  10.                 Toast.LENGTH_LONG).show(); 
  11.     } 
  12.  
  13.     public void doNegativeClick() { 
  14.         Toast.makeText(MainActivity.this, "Вы выбрали кнопку отмены!", 
  15.                 Toast.LENGTH_LONG).show(); 
  16.     } 
  17.  
  18.     public void doNeutralClick() { 
  19.         Toast.makeText(MainActivity.this, "Вы выбрали кнопку нейтрально!", 
  20.                 Toast.LENGTH_LONG).show(); 
  21.     } 


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

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


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

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