2012-11-07 9 views
5

Chcę móc wykryć zmiany w datepicker, jak tylko użytkownik zacznie to zmieniać. Jednak nie chcę używać datrpickerdialog. Czy ktoś wie, dlaczego onDateSet (DatePicker arg0, int arg1, int arg2, int arg3) nie uruchamia się, gdy zmienię datę w datepicker?Jak korzystać z OnDateChangedListener, OnDateSetListener bez użycia datepickerdialog?

Byłbym bardzo wdzięczny za wszelkie uwagi na ten temat. Cheers

Oto uproszczona wersja mojego kodu:

public class AddItem extends Activity implements OnDateChangedListener,OnDateSetListener{ 

DatePicker start ; 

public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.entryelements); 
    start = (DatePicker) findViewById(R.id.start); 

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

    // TODO Auto-generated method stub 
    Toast.makeText(getApplicationContext(), 
      " thiv view"+year, 
      Toast.LENGTH_LONG).show(); 
    Log.v("indatechange", "ok"); 

} 

@Override 
public void onDateSet(DatePicker arg0, int arg1, int arg2, int arg3) { 
    // TODO Auto-generated method stub 
    Toast.makeText(getApplicationContext(), 
      " thiv view"+arg0, 
      Toast.LENGTH_LONG).show(); 
    Log.v("indatechange", "ok"); 
} 

}

Odpowiedz

6

Trzeba powiedzieć datepicker temat OnDateChangedListener. W przeciwieństwie do zwykłych widżetów, DatePicker nie ma setOnDateChangedListener() ... ale ma init(). Użyj init() ustawić domyślną datę i deklarują słuchacza razem:

public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.entryelements); 

    // Set the date to now 
    Calendar calendar = Calendar.getInstance(); 
    start = (DatePicker) findViewById(R.id.start); 
    start.init(calendar.get(Calendar.YEAR), calendar.get(Calendar.MONTH), calendar.get(Calendar.DAY_OF_MONTH), this); 
} 
0

Musisz wywołać metodę init(year, month, day, onDateChangedListener) na DatePicker go skonfigurować, jeśli chcesz być informowany o proaktywnie interakcji.

Zakładając, że chcesz go zainicjować, aby pokazać konkretną datę na początek, ma sens wywoływanie tego zamiast jego metody updateDate (co robisz, czy też nie przejmujesz się wartością początkową?)

Należy zauważyć, że nie obsługuje OnDateSetListener w sposób, w jaki działa DatePickerDialog, ponieważ oznaczałoby to, że interfejs użytkownika może w jakiś sposób wiedzieć, kiedy użytkownik wykonał interakcję z selektorem. Ponieważ nie jest to dialog, musisz sam zdecydować, kiedy myślisz, że są gotowe. Po prostu śledź śledzenie za pomocą OnDateChangedListener, a to będzie miało sens.

0
public void onCreate(Bundle savedInstanceState) { 
super.onCreate(savedInstanceState); 
setContentView(R.layout.entryelements); 
start = (DatePicker) findViewById(R.id.start); 

expirationDate=(EditText) findViewById(R.id.expirationDate); 
Calendar calendar = Calendar.getInstance(); 
start = (DatePicker) findViewById(R.id.start); 
MyOnDateChangeListener onDateChangeListener = new MyOnDateChangeListener(); 
start.init(calendar.get(Calendar.YEAR), calendar.get(Calendar.MONTH), calendar.get(Calendar.DAY_OF_MONTH), onDateChangeListener); 
} 

public class MyOnDateChangeListener implements OnDateChangedListener { 
    @Override 
    public void onDateChanged(DatePicker view, int year, int month, int day) { 
     int mon=month+1; 
     expirationDate.setText(day+"/"+mon+"/"+year); 
    } 
} 
0
DatePicker dpEndDate,dpStartDate; 
dpStartDate=(DatePicker)findViewById(R.id.dpStartDate); 
dpEndDate=(DatePicker)findViewById(R.id.dpEndDate); 
    Calendar today = Calendar.getInstance(); 
     dpStartDate.init(today.get(Calendar.YEAR), 
       today.get(Calendar.MONTH), 
       today.get(Calendar.DAY_OF_MONTH), 
       new DatePicker.OnDateChangedListener() { 
        @Override 
        public void onDateChanged(DatePicker view, int year, int monthOfYear, int dayOfMonth) { 
         SmartUtils.ting(MicaAttendanceFilter.this,"Start Date Changes"); 
         try { 
          SimpleDateFormat simpleDateFormat=new SimpleDateFormat("dd M yyyy"); 
          Calendar startCalendar = Calendar.getInstance(); 
          int startDay=dpStartDate.getDayOfMonth(); 
          int startMonth=dpStartDate.getMonth()+1; 
          int startYear=dpStartDate.getYear(); 
          String startDate = startDay+" "+startMonth+" "+startYear; 
          startCalendar.setTime(simpleDateFormat.parse(startDate)); 
          dpEndDate.setMinDate(startCalendar.getTimeInMillis()); 
         } catch (ParseException e) { 
          e.printStackTrace(); 
         } 
        } 
       } 
     ); 
Powiązane problemy