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

时间:2015-12-15 15:22:20

标签: android alarmmanager android-notifications android-datepicker android-timepicker

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

当我运行apk时,

日期选择器有效。 “设置提醒”按钮可在给定日期创建通知。 但是,Time Picker按钮会打开一个没有内容或视图的小片段对话框(如下所示)。所以我猜不会以某种方式调用Time Picker对话框。

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

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

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

2。我对我的Time Picker Callbacks有疑问。所选的时间值是否返回到setAlarm()?

第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();
        }
    });


}

showTimePickerDialog 方法:

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);
}

showDatePicker 方法:

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");
}

setAlarm 方法:

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));


      }

}

1 个答案:

答案 0 :(得分:0)

你是按照相反的顺序进行的。

您正在创建片段并显示它,之后您将创建时间戳并将其返回。

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