2012-04-24 3 views
1

Я понимаю, что вам нужно выполнить транзакцию, прежде чем делать следующий код. Как сделать эту транзакцию TimePickerDialog?Использование DialogFragment для запуска TimePicker

  DialogFragment newFragment = new DialogFragment(); 
     newFragment.show(getFragmentManager(), "dialog"); 

Как бы интегрировать этот код с помощью этого кода:

private TimePickerDialog.OnTimeSetListener mTimeSetListener = 
      new TimePickerDialog.OnTimeSetListener() { 
       public void onTimeSet(TimePicker view, int hourOfDay, int minute) { 
        mHour = hourOfDay; 
        mMinute = minute; 
       } 
    }; 
    @Override 
    protected Dialog onCreateDialog(int id) { 
     Log.d("is it in here",""); 
     switch (id) { 
     case TIME_DIALOG_ID: 
      return new TimePickerDialog(this, 
        mTimeSetListener, mHour, mMinute, false); 
     } 
     return null; 

Новый код ниже. Это дает неопределенную ошибку конструктора из-за «этого». Как это исправить? Я знаю, что мне нужно передать ему контекст .. но как?

 public static class MyAlertDialogFragment extends DialogFragment { 
     private int mHour; 
     private int mMinute; 
     public static MyAlertDialogFragment newInstance(int title) { 
      MyAlertDialogFragment frag = new MyAlertDialogFragment(); 
      Bundle args = new Bundle(); 
      args.putInt("title", title); 
      frag.setArguments(args); 
      return frag; 
     } 
     private TimePickerDialog.OnTimeSetListener mTimeSetListener = 
       new TimePickerDialog.OnTimeSetListener() { 
        public void onTimeSet(TimePicker view, int hourOfDay, int minute) { 
         mHour = hourOfDay; 
         mMinute = minute; 
        } 
     }; 
     @Override 
     public Dialog onCreateDialog(Bundle savedInstanceState) { 
      Log.d("is it in here",""); 
      case TIME_DIALOG_ID: 
       return new TimePickerDialog(this, 
         mTimeSetListener, mHour, mMinute, false); 
      return null; 

     } 
    } 

код редактировать # 2:

 public TimePickerDialog.OnTimeSetListener mTimeSetListener = 
      new TimePickerDialog.OnTimeSetListener() { 
       public void onTimeSet(TimePicker view, int hourOfDay, int minute) { 
        mHour = hourOfDay; 
        mMinute = minute; 
       } 
    }; 
    public void notification(String value){ 
     // add a click listener to the button 
     //showDialog(TIME_DIALOG_ID); 
     new TimePickerDialog(this, mTimeSetListener, mHour, mMinute, false); 

     // get the current time 
     //final Calendar c = Calendar.getInstance(); 
     //mHour = c.get(Calendar.HOUR_OF_DAY); 
     //mMinute = c.get(Calendar.MINUTE); 

    } 
+1

этот вопрос был разрешен ?? если да, можете ли вы выбрать или опубликовать ответ? – Mike

ответ

0

См http://www.mkyong.com/android/android-time-picker-example/

Вам не нужна сделка на timepicker, , но и может установить timepicker дополнительной layout.xml, заполнить фрагмент с этим и начать новый диалог, как и уже сделал.

Кроме того, вам не нужен фрагмент, если вы хотите отобразить диалог. U может использовать

new TimePickerDialog.show()

, как вы сделали осуждается, где диалоги протолкнул «onCreateDialog()» текущей деятельности. См. http://developer.android.com/reference/android/app/Activity.html#onCreateDialog(int)

+0

Это на самом деле с использованием showDialog() вместо DialogFragment. showDialog() устарел. – Denis

+0

Как я могу отредактировать # 2 для работы? – Denis

0

Вы делаете это точно так, как обычно делаете это для деятельности. Единственное различие заключается в том, что ваш TimePickerDialog будет создан только в диалоговом окне DialogFragment.

т.е. вы должны создать свой DialogFragment подкласс (как подкласс деятельности), положить сборщик и все остальное там, что не все - нет волшебства :-)

+0

Не могли бы вы взглянуть на обновленный код. Я должен передать контекст, но не знаю, как ... Спасибо за вашу помощь до сих пор – Denis

+0

Собственно, вы могли бы проверить править # 2. Кажется проще, но ничего не делает. Я должен упустить что-то маленькое. – Denis

0

Я не уверен, редактировать вы хотите ответил в настоящее время, но и для редактирования, который вы можете заменить это следующим образом:

return new TimePickerDialog(getActivity(), mTimeSetListener, mHour, mMinute, false); 
0

Мой сниппет, он работает как для диалога и встроенного дисплея (смотрите ниже, как):

public class TimePickerFragment extends DialogFragment implements TimePickerDialog.OnTimeSetListener { 

    @Override 
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { 
     Time t = new Time(); 
     t.setToNow(); 

     // Uses the current time as the default values for the picker 
     Bundle args = getArguments(); 
     int hour = args.getInt(GLarmStrings.FRAGMENT_ARGS_TIME_PICKER_HOUR, t.hour); 
     int minute = args.getInt(GLarmStrings.FRAGMENT_ARGS_TIME_PICKER_MINUTE, t.minute); 

     TimePicker tp = new TimePicker(getActivity()); 
     tp.setIs24HourView(GLarmApp.is24HourEnabled(getActivity())); 
     tp.setCurrentHour(hour); 
     tp.setCurrentMinute(minute); 
     tp.setOnTimeChangedListener(...) 
     return tp; 
    } 

    @Override 
    public Dialog onCreateDialog(Bundle savedInstanceState) { 
     Time t = new Time(); 
     t.setToNow(); 

     // Use the current time as the default values for the picker 
     Bundle args = getArguments(); 
     int hour = args.getInt(GLarmStrings.FRAGMENT_ARGS_TIME_PICKER_HOUR, t.hour); 
     int minute = args.getInt(GLarmStrings.FRAGMENT_ARGS_TIME_PICKER_MINUTE, t.minute); 

     // Create a new instance of TimePickerDialog and return it 
     return new TimePickerDialog(getActivity(), this, hour, minute, GLarmApp.is24HourEnabled(getActivity())); 
    } 

    @Override 
    public void onTimeSet(TimePicker view, int hourOfDay, int minute) { 
     // TODO Auto-generated method stub 
    } 
} 

Для его использования:

if (hasDialogFrame) { 
    fragment.setShowsDialog(false); // maybe unnecessary 
    FragmentTransaction ft = getSupportFragmentManager().beginTransaction(); 
    ft.add(R.id.main_dialogs, fragment, "test").commit(); 
} else { 
    fragment.setShowsDialog(true); // maybe unnecessary 
    fragment.show(getSupportFragmentManager(), GUI_DIALOG_TIME_PICKER); 
} 
+0

Я извиняюсь, потому что он не является полным ... в случае просмотра на дисплее вы можете подумать о кнопке ok (который в данный момент я не вижу в моем проекте) или какой-либо другой макет из onCreateView. –

Смежные вопросы