Android 时间选择器对话框为空。打开一个空白视图

Android 时间选择器对话框为空。打开一个空白视图,android,alarmmanager,android-notifications,android-datepicker,android-timepicker,Android,Alarmmanager,Android Notifications,Android Datepicker,Android Timepicker,我正在尝试使用时间选择器和日期选择器对话框在我的Android应用程序上创建计划通知,以设置时间和日期 当我运行apk时 日期选择器工作。 设置提醒按钮在给定日期创建通知。 但是,时间选择器按钮会打开一个没有内容或视图的小片段对话框(如下所示)。所以我猜时间选择器对话框并没有被调用 这是单击“保存”按钮后的屏幕截图。(保存按钮实际上是打开时间选择器对话框的按钮。懒得更改名称) 我已将我的全部代码粘贴在这里。 请解决以下疑问: 1。为什么时间选择器对话框不显示?请告诉我我错过了什么。 2。我怀疑

我正在尝试使用时间选择器和日期选择器对话框在我的Android应用程序上创建计划通知,以设置时间和日期

当我运行apk时

日期选择器工作。 设置提醒按钮在给定日期创建通知。 但是,时间选择器按钮会打开一个没有内容或视图的小片段对话框(如下所示)。所以我猜时间选择器对话框并没有被调用

这是单击“保存”按钮后的屏幕截图。(保存按钮实际上是打开时间选择器对话框的按钮。懒得更改名称)

我已将我的全部代码粘贴在这里。 请解决以下疑问:

1。为什么时间选择器对话框不显示?请告诉我我错过了什么。

2。我怀疑我的时间选择器回拨。选定的时间值是否返回到setAlarm()?

    public class ReminderFragment extends FragmentActivity {
    // declarations here
       private TimePickerDialog.OnTimeSetListener mTimeSetListener =
        new TimePickerDialog.OnTimeSetListener() {
            public void onTimeSet(TimePicker view, int hourOfDay, int minute) {
                pHour = hourOfDay;
                pMinute = minute;
            }
        };

    private DatePickerDialog.OnDateSetListener ondate =
        new DatePickerDialog.OnDateSetListener() {

            public void onDateSet(DatePicker view, int year, int monthOfYear,
                          int dayOfMonth) {
                pYear = year;
                pMonth = monthOfYear;
                pDay = dayOfMonth;

    }
};
3。有什么我应该添加到清单文件中的吗?

    public class ReminderFragment extends FragmentActivity {
    // declarations here
       private TimePickerDialog.OnTimeSetListener mTimeSetListener =
        new TimePickerDialog.OnTimeSetListener() {
            public void onTimeSet(TimePicker view, int hourOfDay, int minute) {
                pHour = hourOfDay;
                pMinute = minute;
            }
        };

    private DatePickerDialog.OnDateSetListener ondate =
        new DatePickerDialog.OnDateSetListener() {

            public void onDateSet(DatePicker view, int year, int monthOfYear,
                          int dayOfMonth) {
                pYear = year;
                pMonth = monthOfYear;
                pDay = dayOfMonth;

    }
};
OnCreate
方法:

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.fragment_set_reminder);
    /** Listener for click event of the button */

    findViewById(R.id.dialog).setOnClickListener(new OnClickListener() {

        @Override
        public void onClick(View v) {
            showDatePicker();
        }
    });

    findViewById(R.id.set_button).setOnClickListener(new OnClickListener() {

        @Override
        public void onClick(View v) {
            showTimePickerDialog(v)   ;         
        }
    });

    findViewById(R.id.btnSetReminder).setOnClickListener(new OnClickListener() {

        @Override
        public void onClick(View v) {
            setAlarm();
        }
    });


}
public Dialog showTimePickerDialog(View v) {
    DialogFragment newFragment = new DialogFragment();
    newFragment.show(getSupportFragmentManager(), "timePicker");

    // Use the current time as the default values for the picker
    final Calendar c = Calendar.getInstance();
    int hour = c.get(Calendar.HOUR_OF_DAY);
    int minute = c.get(Calendar.MINUTE);

    // Create a new instance of TimePickerDialog and return it
    return new TimePickerDialog(this, mTimeSetListener, hour, minute,true);
}
private void showDatePicker() {
    DatePickerFragment date = new DatePickerFragment();
    /**
     * Set Up Current Date Into dialog
     */
    Calendar calender = Calendar.getInstance();
    Bundle args = new Bundle();
    args.putInt("year", calender.get(Calendar.YEAR));
    args.putInt("month", calender.get(Calendar.MONTH));
    args.putInt("day", calender.get(Calendar.DAY_OF_MONTH));
    date.setArguments(args);
    /**
     * Set Call back to capture selected date
     */
    date.setCallBack(ondate);
    date.show(getSupportFragmentManager(), "Date Picker");
}
public void setAlarm() {
          calcal = new GregorianCalendar();
          //TODO -- CHANGE TIME HERE
          calcal.set(pYear, pMonth, pDay, pHour, pMinute); //change minute and seconds before compiling


          Intent alertIntent = new Intent(ReminderFragment.this, AlertReceiver.class);

          AlarmManager alarmManager = (AlarmManager)
                  getSystemService(Context.ALARM_SERVICE);
          alarmManager.set(AlarmManager.RTC_WAKEUP, calcal.getTimeInMillis(),
                  PendingIntent.getBroadcast(ReminderFragment.this, 1, alertIntent,
                          PendingIntent.FLAG_UPDATE_CURRENT));


      }
showTimePickerDialog
方法:

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.fragment_set_reminder);
    /** Listener for click event of the button */

    findViewById(R.id.dialog).setOnClickListener(new OnClickListener() {

        @Override
        public void onClick(View v) {
            showDatePicker();
        }
    });

    findViewById(R.id.set_button).setOnClickListener(new OnClickListener() {

        @Override
        public void onClick(View v) {
            showTimePickerDialog(v)   ;         
        }
    });

    findViewById(R.id.btnSetReminder).setOnClickListener(new OnClickListener() {

        @Override
        public void onClick(View v) {
            setAlarm();
        }
    });


}
public Dialog showTimePickerDialog(View v) {
    DialogFragment newFragment = new DialogFragment();
    newFragment.show(getSupportFragmentManager(), "timePicker");

    // Use the current time as the default values for the picker
    final Calendar c = Calendar.getInstance();
    int hour = c.get(Calendar.HOUR_OF_DAY);
    int minute = c.get(Calendar.MINUTE);

    // Create a new instance of TimePickerDialog and return it
    return new TimePickerDialog(this, mTimeSetListener, hour, minute,true);
}
private void showDatePicker() {
    DatePickerFragment date = new DatePickerFragment();
    /**
     * Set Up Current Date Into dialog
     */
    Calendar calender = Calendar.getInstance();
    Bundle args = new Bundle();
    args.putInt("year", calender.get(Calendar.YEAR));
    args.putInt("month", calender.get(Calendar.MONTH));
    args.putInt("day", calender.get(Calendar.DAY_OF_MONTH));
    date.setArguments(args);
    /**
     * Set Call back to capture selected date
     */
    date.setCallBack(ondate);
    date.show(getSupportFragmentManager(), "Date Picker");
}
public void setAlarm() {
          calcal = new GregorianCalendar();
          //TODO -- CHANGE TIME HERE
          calcal.set(pYear, pMonth, pDay, pHour, pMinute); //change minute and seconds before compiling


          Intent alertIntent = new Intent(ReminderFragment.this, AlertReceiver.class);

          AlarmManager alarmManager = (AlarmManager)
                  getSystemService(Context.ALARM_SERVICE);
          alarmManager.set(AlarmManager.RTC_WAKEUP, calcal.getTimeInMillis(),
                  PendingIntent.getBroadcast(ReminderFragment.this, 1, alertIntent,
                          PendingIntent.FLAG_UPDATE_CURRENT));


      }
showDatePicker
方法:

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.fragment_set_reminder);
    /** Listener for click event of the button */

    findViewById(R.id.dialog).setOnClickListener(new OnClickListener() {

        @Override
        public void onClick(View v) {
            showDatePicker();
        }
    });

    findViewById(R.id.set_button).setOnClickListener(new OnClickListener() {

        @Override
        public void onClick(View v) {
            showTimePickerDialog(v)   ;         
        }
    });

    findViewById(R.id.btnSetReminder).setOnClickListener(new OnClickListener() {

        @Override
        public void onClick(View v) {
            setAlarm();
        }
    });


}
public Dialog showTimePickerDialog(View v) {
    DialogFragment newFragment = new DialogFragment();
    newFragment.show(getSupportFragmentManager(), "timePicker");

    // Use the current time as the default values for the picker
    final Calendar c = Calendar.getInstance();
    int hour = c.get(Calendar.HOUR_OF_DAY);
    int minute = c.get(Calendar.MINUTE);

    // Create a new instance of TimePickerDialog and return it
    return new TimePickerDialog(this, mTimeSetListener, hour, minute,true);
}
private void showDatePicker() {
    DatePickerFragment date = new DatePickerFragment();
    /**
     * Set Up Current Date Into dialog
     */
    Calendar calender = Calendar.getInstance();
    Bundle args = new Bundle();
    args.putInt("year", calender.get(Calendar.YEAR));
    args.putInt("month", calender.get(Calendar.MONTH));
    args.putInt("day", calender.get(Calendar.DAY_OF_MONTH));
    date.setArguments(args);
    /**
     * Set Call back to capture selected date
     */
    date.setCallBack(ondate);
    date.show(getSupportFragmentManager(), "Date Picker");
}
public void setAlarm() {
          calcal = new GregorianCalendar();
          //TODO -- CHANGE TIME HERE
          calcal.set(pYear, pMonth, pDay, pHour, pMinute); //change minute and seconds before compiling


          Intent alertIntent = new Intent(ReminderFragment.this, AlertReceiver.class);

          AlarmManager alarmManager = (AlarmManager)
                  getSystemService(Context.ALARM_SERVICE);
          alarmManager.set(AlarmManager.RTC_WAKEUP, calcal.getTimeInMillis(),
                  PendingIntent.getBroadcast(ReminderFragment.this, 1, alertIntent,
                          PendingIntent.FLAG_UPDATE_CURRENT));


      }
setAlarm
方法:

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.fragment_set_reminder);
    /** Listener for click event of the button */

    findViewById(R.id.dialog).setOnClickListener(new OnClickListener() {

        @Override
        public void onClick(View v) {
            showDatePicker();
        }
    });

    findViewById(R.id.set_button).setOnClickListener(new OnClickListener() {

        @Override
        public void onClick(View v) {
            showTimePickerDialog(v)   ;         
        }
    });

    findViewById(R.id.btnSetReminder).setOnClickListener(new OnClickListener() {

        @Override
        public void onClick(View v) {
            setAlarm();
        }
    });


}
public Dialog showTimePickerDialog(View v) {
    DialogFragment newFragment = new DialogFragment();
    newFragment.show(getSupportFragmentManager(), "timePicker");

    // Use the current time as the default values for the picker
    final Calendar c = Calendar.getInstance();
    int hour = c.get(Calendar.HOUR_OF_DAY);
    int minute = c.get(Calendar.MINUTE);

    // Create a new instance of TimePickerDialog and return it
    return new TimePickerDialog(this, mTimeSetListener, hour, minute,true);
}
private void showDatePicker() {
    DatePickerFragment date = new DatePickerFragment();
    /**
     * Set Up Current Date Into dialog
     */
    Calendar calender = Calendar.getInstance();
    Bundle args = new Bundle();
    args.putInt("year", calender.get(Calendar.YEAR));
    args.putInt("month", calender.get(Calendar.MONTH));
    args.putInt("day", calender.get(Calendar.DAY_OF_MONTH));
    date.setArguments(args);
    /**
     * Set Call back to capture selected date
     */
    date.setCallBack(ondate);
    date.show(getSupportFragmentManager(), "Date Picker");
}
public void setAlarm() {
          calcal = new GregorianCalendar();
          //TODO -- CHANGE TIME HERE
          calcal.set(pYear, pMonth, pDay, pHour, pMinute); //change minute and seconds before compiling


          Intent alertIntent = new Intent(ReminderFragment.this, AlertReceiver.class);

          AlarmManager alarmManager = (AlarmManager)
                  getSystemService(Context.ALARM_SERVICE);
          alarmManager.set(AlarmManager.RTC_WAKEUP, calcal.getTimeInMillis(),
                  PendingIntent.getBroadcast(ReminderFragment.this, 1, alertIntent,
                          PendingIntent.FLAG_UPDATE_CURRENT));


      }

}

您正在按操作顺序进行操作

您正在创建片段并显示它,然后创建时间选择器并返回它


您必须创建时间选择器,将其放入片段中,然后显示片段。

您可以很容易地在片段中找到许多时间选择器的示例。比如这里。你应该寻找对话片段。