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();
    
  • 然后您就有了一个日历变量,可以将其分配给报警功能

    将selecteddate传递给函数,您将在用户选择的时间和日期触发一个警报

    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方法。将日历传递给该功能。很高兴为您提供帮助。