TimePickerDialog を、DialogFragmentで。。。

android.app.TimePickerDialog を、DialogFragmentで表示する。

方法は2通り
(1)DialogFragment を new 演算子で直接記述する方法
(2)DialogFragment を 継承した抽象クラス

(1) はとても簡単
new DialogFragment(){
   @Override
   public Dialog onCreateDialog(Bundle _savedInstanceState){
      Calendar cal = Calendar.getInstance();
      return new TimePickerDialog(getActivity(), new TimePickerDialog.OnTimeSetListener(){
            @Override
            public void onTimeSet(TimePicker view, int hourOfDay, int minute){
               //
               // 任意の処理
               //

            }
         }, cal.get(Calendar.HOUR_OF_DAY), cal.get(Calendar.MINUTE), true
      );
   }
}.show(getFragmentManager(), "timepicker");


(2) は、頻繁に記述がある場合に少しコード量が減るだけで期待するほどでもない。

import java.util.Calendar;
import android.app.Dialog;
import android.app.DialogFragment;
import android.app.TimePickerDialog;
import android.os.Bundle;
import android.widget.TimePicker;
/**
 * TimePickerDialogFragment
 */

public abstract class TimePickerDialogFragment extends DialogFragment{
   protected abstract void onTimeSet(int hourOfDay, int minute);
   @Override
   public Dialog onCreateDialog(Bundle savedInstanceState){
      Calendar cal = Calendar.getInstance();
      return new TimePickerDialog(getActivity(), new TimePickerDialog.OnTimeSetListener(){
            @Override
            public void onTimeSet(TimePicker view, int hourOfDay, int minute){
               TimePickerDialogFragment.this.onTimeSet(hourOfDay,minute);
            }
         }, cal.get(Calendar.HOUR_OF_DAY), cal.get(Calendar.MINUTE), true
      );
   }
}

で実行は、、

new TimePickerDialogFragment(){
   @Override
   protected void onTimeSet(int hourOfDay, int minute){
      //
      // 任意の処理
      //

   }
}.show(getFragmentManager(), "progress");

いずれも、ダイアログの表示は、、、

f:id:posturan:20160313194202p:plain