我正在尝试使用时间选择器和日期选择器对话框在我的Android应用程序上创建预定通知,以设置时间和日期。
当我运行apk时,
日期选择器有效。 “设置提醒”按钮可在给定日期创建通知。 但是,Time Picker按钮会打开一个没有内容或视图的小片段对话框(如下所示)。所以我猜不会以某种方式调用Time Picker对话框。
这是点击“保存”按钮后的屏幕截图。 (保存按钮实际上是用于打开时间选择器对话框的按钮。懒得更改名称)
我在这里粘贴了我的全部代码。 请解决以下疑问:
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));
}
}
答案 0 :(得分:0)
你是按照相反的顺序进行的。
您正在创建片段并显示它,之后您将创建时间戳并将其返回。
您必须创建时间戳,将其放入片段中,然后显示片段。