Android DatePickerDialog和TimePickerDialog不同时工作
我不熟悉安卓系统。我一直在开发我的第一个应用程序,这是一个提醒。在提醒中,我创建了两个Android DatePickerDialog和TimePickerDialog不同时工作,android,datepickerdialog,timepickerdialog,Android,Datepickerdialog,Timepickerdialog,我不熟悉安卓系统。我一直在开发我的第一个应用程序,这是一个提醒。在提醒中,我创建了两个EditTexts,一个用于从TimePickerDialog选择时间,另一个用于从DatePickerDialog选择日期。当我同时包括(TimePickerDialog和DatePickerDialog)时,为它们设置的时间将被视为单独的时间,并且每一个都将在应该的时候关闭。基本上,两个警报会响,而不是一个 我应该如何包括TimePickerDialog和DatePickerDialog,以便在设置它们时将
EditText
s,一个用于从TimePickerDialog
选择时间,另一个用于从DatePickerDialog
选择日期。当我同时包括(TimePickerDialog和DatePickerDialog)时,为它们设置的时间将被视为单独的时间,并且每一个都将在应该的时候关闭。基本上,两个警报会响,而不是一个
我应该如何包括TimePickerDialog和DatePickerDialog,以便在设置它们时将它们视为一个警报
任何帮助都将不胜感激
这是我的MainActivity类(我从中删除了TimePickerDialog部分):
MainActivity.java
public class MainActivity extends Activity {
EditText editText;
TextView textView;
Spinner spinner;
ArrayAdapter<CharSequence> adapter;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
textView = (TextView) findViewById(R.id.textView);
spinner = (Spinner) findViewById(R.id.spinner);
adapter = ArrayAdapter.createFromResource(MainActivity.this,
R.array.Alarms, android.R.layout.simple_spinner_item);
adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
spinner.setAdapter(adapter);
spinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
@Override
public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {
Toast.makeText(MainActivity.this, parent.getItemAtPosition(position) + " is selected", Toast.LENGTH_SHORT).show();
}
@Override
public void onNothingSelected(AdapterView<?> parent) {
}
});
editText = (EditText) findViewById(R.id.editText);
editText.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
editText.setText("");
openTimePickerDialog(false);
}
});
}
private void openTimePickerDialog(boolean is24r) {
Calendar calendar = Calendar.getInstance();
TimePickerDialog timePickerDialog =
new TimePickerDialog(
MainActivity.this,
onTimeSetListener,
calendar.get(Calendar.HOUR_OF_DAY),
calendar.get(Calendar.MINUTE),
is24r);
timePickerDialog.setTitle("Set time");
timePickerDialog.show();
}
TimePickerDialog.OnTimeSetListener onTimeSetListener =
new TimePickerDialog.OnTimeSetListener() {
@Override
public void onTimeSet(TimePicker view, int hourOfDay, int minute) {
Calendar calendar = Calendar.getInstance();
calendar.set(Calendar.HOUR_OF_DAY, hourOfDay);
calendar.set(Calendar.MINUTE, minute);
calendar.set(Calendar.SECOND, 0);
calendar.set(Calendar.MILLISECOND, 0);
textView.setText(hourOfDay + ":" + minute);
setAlarm(calendar);
setAlarmTwo(calendar);
}
};
private void setAlarm(Calendar targetCal) {
if (spinner.getSelectedItem().toString().equals("none")) {
Intent intent = new Intent(getBaseContext(), AlarmReceiver.class);
PendingIntent pendingIntent = PendingIntent.getBroadcast(getBaseContext(), 2, intent, 0);
AlarmManager alarmManager = (AlarmManager) getSystemService(Context.ALARM_SERVICE);
alarmManager.set(AlarmManager.RTC_WAKEUP, targetCal.getTimeInMillis(), pendingIntent);
textView.setText(
"\n\n***\n"
+ "One shot alarm " + "/n" + targetCal.getTime());
}
}
private void setAlarmTwo(Calendar targetCalendar) {
if (spinner.getSelectedItem().toString().equals("two mins")) {
Intent intent = new Intent(getBaseContext(), AlarmReceiver.class);
PendingIntent pendingIntent = PendingIntent.getBroadcast(getBaseContext(), 5, intent, 0);
AlarmManager alarmManager = (AlarmManager) getSystemService(Context.ALARM_SERVICE);
alarmManager.setRepeating(AlarmManager.RTC_WAKEUP,
targetCalendar.getTimeInMillis(),
TimeUnit.MINUTES.toMillis(2),
pendingIntent);
textView.setText(
"\n\n***\n"
+ "The alarm will go off every 2 minutes " + "\n" + targetCalendar.getTime() + "\n"
+ "***\n");
}
}
}
公共类MainActivity扩展活动{
编辑文本编辑文本;
文本视图文本视图;
纺纱机;
阵列适配器;
@凌驾
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
textView=(textView)findViewById(R.id.textView);
微调器=(微调器)findViewById(R.id.spinner);
adapter=ArrayAdapter.createFromResource(MainActivity.this,
R.array.Alarms、android.R.layout.simple\u微调器\u项);
setDropDownViewResource(android.R.layout.simple\u微调器\u下拉菜单\u项);
旋转器。设置适配器(适配器);
spinner.setOnItemSelectedListener(新的AdapterView.OnItemSelectedListener(){
@凌驾
已选择公共视图(AdapterView父视图、视图视图、整型位置、长id){
Toast.makeText(MainActivity.this,parent.getItemAtPosition(position)+“已选中”,Toast.LENGTH_SHORT.show();
}
@凌驾
未选择公共无效(AdapterView父级){
}
});
editText=(editText)findViewById(R.id.editText);
editText.setOnClickListener(新视图.OnClickListener(){
@凌驾
公共void onClick(视图v){
editText.setText(“”);
openTimePickerDialog(假);
}
});
}
私有void openTimePickerDialog(布尔值is24r){
日历=Calendar.getInstance();
时间选择器Dialog时间选择器Dialog=
新时间选择器对话框(
这个,,
onTimeSetListener,
日历。获取(日历。每天的小时),
日历。获取(日历。分钟),
is24r);
timePickerDialog.setTitle(“设置时间”);
timePickerDialog.show();
}
TimePickerDialog.OnTimeSetListener OnTimeSetListener=
新的TimePickerDialog.OnTimeSetListener(){
@凌驾
时间集上的公共void(时间选择器视图,整数小时日,整数分钟){
日历=Calendar.getInstance();
calendar.set(calendar.HOUR\u OF_DAY,hourOfDay);
calendar.set(calendar.MINUTE,MINUTE);
calendar.set(calendar.SECOND,0);
calendar.set(calendar.毫秒,0);
textView.setText(hourOfDay+“:”+分钟);
设置报警(日历);
设置报警2(日历);
}
};
专用无效设置报警(日历目标){
if(spinner.getSelectedItem().toString().equals(“none”)){
Intent Intent=新的Intent(getBaseContext(),AlarmReceiver.class);
PendingIntent PendingIntent=PendingIntent.getBroadcast(getBaseContext(),2,intent,0);
AlarmManager AlarmManager=(AlarmManager)getSystemService(Context.ALARM\u服务);
alarmManager.set(alarmManager.RTC_WAKEUP,targetCal.getTimeInMillis(),PendingContent);
textView.setText(
“\n\n***\n”
+“一次性报警”+“/n”+targetCal.getTime());
}
}
专用void setAlarmTwo(日历目标日历){
if(spinner.getSelectedItem().toString().equals(“两分钟”)){
Intent Intent=新的Intent(getBaseContext(),AlarmReceiver.class);
PendingIntent PendingIntent=PendingIntent.getBroadcast(getBaseContext(),5,intent,0);
AlarmManager AlarmManager=(AlarmManager)getSystemService(Context.ALARM\u服务);
alarmManager.setRepeating(alarmManager.RTC_唤醒,
targetCalendar.getTimeInMillis(),
时间单位。分钟。托米利斯(2),
悬挂式);
textView.setText(
“\n\n***\n”
+警报将每2分钟发出一次“+”\n“+targetCalendar.getTime()+”\n
+“***\n”);
}
}
}
将此应用于您的程序-
Calendar selecteddate;
final Calendar c = Calendar.getInstance();
int mYear = c.get(Calendar.YEAR);
int mMonth = c.get(Calendar.MONTH);
int mDay = c.get(Calendar.DAY_OF_MONTH);
DatePickerDialog startdatepicker = new DatePickerDialog(MainActivity.this,
new DatePickerDialog.OnDateSetListener() {
@Override
public void onDateSet(DatePicker view, int year,
int monthOfYear, int dayOfMonth) {
final Calendar c = Calendar.getInstance();
c.set(year, monthOfYear, dayOfMonth);
selecteddate = c;
}
}, mYear, mMonth, mDay);
startdatepicker.show();
TimePickerDialog timePickerDialog = new TimePickerDialog(MainActivity.this,
new TimePickerDialog.OnTimeSetListener() {
@Override
public void onTimeSet(TimePicker view, int hourOfDay, int minute) {
selecteddate.set(selectedinitialdate.get(Calendar.YEAR), selecteddate.get(Calendar.MONTH), selecteddate.get(Calendar.DAY_OF_MONTH), hourOfDay, minute);
}
}
, 10, 10, false
);
timePickerDialog.show();
private void setAlarm(Calendar targetCal) {
Intent intent = new Intent(getBaseContext(), AlarmReceiver.class);
PendingIntent pendingIntent = PendingIntent.getBroadcast(getBaseContext(), 2, intent, 0);
AlarmManager alarmManager = (AlarmManager) getSystemService(Context.ALARM_SERVICE);
alarmManager.set(AlarmManager.RTC_WAKEUP, targetCal.getTimeInMillis(), pendingIntent);
}
让我知道这是否对您有效。澄清您试图实现的目标。从你的问题中,我知道你想从日期选择器中选择日期,从时间选择器中选择时间(对于所选日期)。并触发日期和时间组合的单个警报。如果我错了,请纠正我。你是对的,这就是我想要实现的。所选的时间和日期(在我的代码中,到目前为止)是分开处理的,而不是合并的。非常感谢您的时间和评论!!我有一个问题,我应该在哪里使用未使用的setAlarm方法?您已经在代码中使用了setAlarm方法。将日历传递给该功能。很高兴为您提供帮助。