2016-03-29 2 views
3

Я новичок в Android. Я разрабатываю свое первое приложение, которое является напоминанием. В напоминании я создал два EditText s, один для выбора времени от TimePickerDialog, а другой для выбора даты от DatePickerDialog. когда я включаю оба параметра (TimePickerDialog и DatePickerDialog), времена, установленные для них, рассматриваются как отдельные времена, и каждый из них будет отключен, когда это предполагается. В принципе, две тревоги будут отключены, а не одна.DatePickerDialog и TimePickerDialog не работают в одно и то же время

Как включить 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"); 
    } 

} 
} 
+0

уточните, чего вы пытаетесь достичь. из вашего вопроса я получаю, что вы хотите выбрать дату из datepicker и время от timepicker (для выбранной даты). и вызывать один единственный сигнал для комбинации даты и времени. исправьте меня, если я ошибаюсь. –

+0

Вы правы, этого я и пытаюсь достичь. Выбранное время и дата (в моем коде до сих пор) обрабатываются отдельно, не объединены. – Mark

ответ

1

применить это к вашему програмно

  1. определить глобальную переменную календаря.

    Calendar selecteddate; 
    
  2. для показа DatePicker, определяют календарь первого и затем DatePicker.

    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(); 
    
  3. а затем на время.

    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(); 
    
  4. то есть календарь переменную, которая готова быть назначены функции сигнализации.

    передать выбранное значение функции, и вы будете вызывать один сигнал тревоги по времени и дате, выбранным пользователем.

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

дайте мне знать, если это работает для вас.

+0

Большое вам спасибо за ваше время и комментарий! У меня вопрос, где следует использовать метод setAlarm, который не используется? – Mark

+0

Вы уже использовали метод setalarm в своем коде. передайте календарь этой функции. –

+0

вы можете принять ответ, если это то, что вы хотите. –

Смежные вопросы