2012-04-12 4 views
2

Ich bin gerade dabei, eine Datum/Uhrzeit-Auswahlklasse zu erstellen. Im Wesentlichen habe ich 3 Radiobuttons erstellt: "Morgen", "In 2 Tagen" und "Nächste Woche".Einstellen des Datums eines DatePickers mit der updateDate() -Methode

Was ich schauen möchte, ist, dass diese Optionsfelder die Datumsauswahl automatisch auf die entsprechende Anzahl von Tagen (1, 2 und 7 Tage voraus) einstellen.

Ich habe versucht, mit der Methode updateDate (int year, int month, int day) meinen DatePicker zu aktualisieren, wenn der Benutzer auf das Optionsfeld klickt, aber nichts passiert, wenn auf eines der Optionsfelder geklickt wird.

Gibt es eine spezielle Möglichkeit, das angezeigte Datum des Datums zu ändern, OHNE die Ticker-Tasten zu verwenden?

Hier ist mein Code für die Klasse:

package com.inviscidlabs.schooled; 

import java.util.Calendar; 

import android.app.Activity; 
import android.os.Bundle; 
import android.util.Log; 
import android.view.View; 
import android.widget.DatePicker; 
import android.widget.RadioButton; 
import android.widget.RadioGroup; 

public class DateTimePicker extends Activity{ 


    private DatePicker datePicker; 

    private RadioGroup dtpRadGroup; 
    private RadioButton rTomorrow; 
    private RadioButton rIn2Days; 
    private RadioButton rNextWeek; 


    private Calendar cNow; 
    private Calendar c; 


    public void onCreate(Bundle savedInstanceState){ 
     super.onCreate(savedInstanceState); 
     //declare resources 
     setContentView(R.layout.datetimepicker); 
     dtpRadGroup=(RadioGroup) findViewById(R.id.dtp_radiogroup); 
     rTomorrow=(RadioButton) findViewById(R.id.dtp_button_tomorrow); 
     rIn2Days=(RadioButton) findViewById(R.id.dtp_button_twodays); 
     rNextWeek= (RadioButton) findViewById(R.id.dtp_button_nextweek); 
     datePicker= (DatePicker) findViewById(R.id.dtp_datepicker); 

     cNow= Calendar.getInstance(); 
     cNow.setLenient(true);  c.setLenient(true); 
     datePicker.init(cNow.get(Calendar.YEAR), cNow.get(Calendar.MONTH), cNow.get(Calendar.DAY_OF_MONTH), dListener); 

    } 

    public void onClick(View v){ 

     switch(v.getId()){ 

     case R.id.dtp_button_finished: 

      break; 
     } 

    } 

    public void onRadioButtonClicked(View v){ 
     c=Calendar.getInstance(); 



     switch(v.getId()){ 

     case R.id.dtp_button_tomorrow: 
      c.add(Calendar.DAY_OF_YEAR, 1); 
      datePicker.updateDate(c.get(Calendar.YEAR),c.get(Calendar.MONTH), c.get(Calendar.DAY_OF_MONTH)); 

      break; 
     case R.id.dtp_button_twodays: 
      c.add(Calendar.DAY_OF_YEAR, 2); 
      datePicker.updateDate(c.get(Calendar.YEAR),c.get(Calendar.MONTH), c.get(Calendar.DAY_OF_MONTH)); 
      break; 
     case R.id.dtp_button_nextweek: 
      c.add(Calendar.DAY_OF_YEAR, 7); 
      datePicker.updateDate(c.get(Calendar.YEAR),c.get(Calendar.MONTH), c.get(Calendar.DAY_OF_MONTH)); 
      break; 
     } 
    } 





    private DatePicker.OnDateChangedListener dListener = new DatePicker.OnDateChangedListener() { 

     public void onDateChanged(DatePicker view, int year, int monthOfYear, 
       int dayOfMonth) { 

       Calendar cPickerDate = Calendar.getInstance(); 
       cPickerDate.set(year, monthOfYear, dayOfMonth); 
       int dayOfYear = cPickerDate.get(Calendar.DAY_OF_YEAR); 
       Log.v("day of year", String.valueOf(dayOfYear)); 



       //automatically checks radio buttons if user manually adjust picker 
       if(dayOfYear==cNow.get(Calendar.DAY_OF_YEAR)+1){ 
        rTomorrow.setChecked(true); 
       } 
       else if(dayOfYear==cNow.get(Calendar.DAY_OF_YEAR)+2){ 
        rIn2Days.setChecked(true); 
       } 
       else if(dayOfYear==cNow.get(Calendar.DAY_OF_YEAR)+7){ 
        rNextWeek.setChecked(true); 
       } else { 
        dtpRadGroup.clearCheck(); 
       } 

     } 
    }; 





} 

Antwort

0

Verwendung der folgenden modifizierten Code ::::

package com.inviscidlabs.schooled; 

import java.util.Calendar; 

import android.app.Activity; 
import android.os.Bundle; 
import android.util.Log; 
import android.view.View; 
import android.widget.DatePicker; 
import android.widget.RadioButton; 
import android.widget.RadioGroup; 

public class DateTimePicker extends Activity{ 

    private static int TODAY = 0; 
    private static int NEXTDAY = 1; 
    private static int NEXTWEEK = 2; 

    private DatePicker datePicker; 
    private RadioGroup dtpRadGroup; 
    private RadioButton rTomorrow; 
    private RadioButton rIn2Days; 
    private RadioButton rNextWeek; 


    private Calendar cNow; 
    private Calendar c; 


    public void onCreate(Bundle savedInstanceState){ 
     super.onCreate(savedInstanceState); 
     //declare resources 
     setContentView(R.layout.datetimepicker); 
     dtpRadGroup=(RadioGroup) findViewById(R.id.dtp_radiogroup); 
     rTomorrow=(RadioButton) findViewById(R.id.dtp_button_tomorrow); 
     rIn2Days=(RadioButton) findViewById(R.id.dtp_button_twodays); 
     rNextWeek= (RadioButton) findViewById(R.id.dtp_button_nextweek); 
     datePicker= (DatePicker) findViewById(R.id.dtp_datepicker); 

     cNow= Calendar.getInstance(); 
     cNow.setLenient(true);  c.setLenient(true); 
     datePicker.init(cNow.get(Calendar.YEAR), cNow.get(Calendar.MONTH), cNow.get(Calendar.DAY_OF_MONTH), dListener); 

    } 

    public void onClick(View v){ 

     switch(v.getId()){ 

     case R.id.dtp_button_finished: 

      break; 
     } 

    } 

    public void onRadioButtonClicked(View v){ 
     c=Calendar.getInstance(); 



     switch(v.getId()){ 

     case R.id.dtp_button_tomorrow: 
      c.add(Calendar.DAY_OF_YEAR, 1); 
      showDialog(TODAY); 
      // datePicker.updateDate(c.get(Calendar.YEAR),c.get(Calendar.MONTH), c.get(Calendar.DAY_OF_MONTH)); 

      break; 
     case R.id.dtp_button_twodays: 
      c.add(Calendar.DAY_OF_YEAR, 2); 
      showDialog(NEXTDAY); 
      //datePicker.updateDate(c.get(Calendar.YEAR),c.get(Calendar.MONTH), c.get(Calendar.DAY_OF_MONTH)); 
      break; 
     case R.id.dtp_button_nextweek: 
      c.add(Calendar.DAY_OF_YEAR, 7); 
      showDialog(NEXTWEEK); 
      //datePicker.updateDate(c.get(Calendar.YEAR),c.get(Calendar.MONTH), c.get(Calendar.DAY_OF_MONTH)); 
      break; 
     } 
    } 

    @Override 
    protected Dialog onCreateDialog(int id) { 
     final Calendar c = Calendar.getInstance(); 
     switch (id) { 
     case TODAY: 
      c.add(Calendar.DAY_OF_YEAR, 1); 
     case NEXTDAY: 
      c.add(Calendar.DAY_OF_YEAR, 2); 
     case NEXTWEEK: 
      c.add(Calendar.DAY_OF_YEAR, 7); 
     } 
     DatePickerDialog _date_repeat = new DatePickerDialog(this, mDateSetListener,c.get(Calendar.YEAR),c.get(Calendar.MONTH), c.get(Calendar.DAY_OF_MONTH)){ 
       @Override 
       public void onDateChanged(DatePicker view, int year, int monthOfYear, int dayOfMonth) 
       { 
        Calendar cPickerDate = Calendar.getInstance(); 
         cPickerDate.set(year, monthOfYear, dayOfMonth); 
         int dayOfYear = cPickerDate.get(Calendar.DAY_OF_YEAR); 
         Log.v("day of year", String.valueOf(dayOfYear)); 



         //automatically checks radio buttons if user manually adjust picker 
         if(dayOfYear==cNow.get(Calendar.DAY_OF_YEAR)+1){ 
          rTomorrow.setChecked(true); 
         } 
         else if(dayOfYear==cNow.get(Calendar.DAY_OF_YEAR)+2){ 
          rIn2Days.setChecked(true); 
         } 
         else if(dayOfYear==cNow.get(Calendar.DAY_OF_YEAR)+7){ 
          rNextWeek.setChecked(true); 
         } else { 
          dtpRadGroup.clearCheck(); 
         }     
       } 
      }; 
     }; 
     return _date_repeat; 
    } 
} 
+0

Danke für die schnelle Antwort. Es stellt sich heraus, dass der Code, den ich hatte, in Ordnung war, aber nicht auf dem ROM funktionierte, das ich auf meinem Telefon lief (funktioniert auf meinem Tablet OK). Ihre Korrektur funktioniert gut, aber ich muss DatePicker verwenden, da ich einen halb angepassten DateTimePickerDialog erstellen soll –