2013-09-25 9 views
20

Chcę wyświetlić okno podręczne datepicker. Znalazłem kilka przykładów, ale nie otrzymuję tego poprawnie. Mam jeden przycisk i chcę, aby po kliknięciu przycisku okno datepicker miało zostać wyskakujące i po ustawieniu daty data powinna być zapisana w zmiennej. Proszę podać mi przykładowy kod lub dobre linki.Datepicker: Jak otworzyć datepicker po kliknięciu przycisku i zapisać wartość w zmiennej

+1

http://stackoverflow.com/questions/18672094/android-sdk-datepickerfragment-and-textview/18672134#18672134. sprawdź ten – Raghunandan

+0

Możliwy duplikat [this] (http://stackoverflow.com/q/14933330/1952459). Proponuję najpierw wyszukać w Google lub tutaj w StackOverflow dla swoich problemów, a następnie opublikować pytanie. –

+0

http://www.mkyong.com/android/android-date-picker-example/ sprawdź to –

Odpowiedz

13

Ustaw tę klasę jako wewnętrznej klasy w swojej działalności

Jeśli chcesz ustawić aktualną datę jako datę widać po otwarciu datepicker. Możesz dostać to tak

Calendar c = Calendar.getInstance(); 
int startYear = c.get(Calendar.YEAR); 
int startMonth = c.get(Calendar.MONTH); 
int startDay = c.get(Calendar.DAY_OF_MONTH); 

class StartDatePicker extends DialogFragment implements DatePickerDialog.OnDateSetListener{ 
    @Override 
    public Dialog onCreateDialog(Bundle savedInstanceState) { 
     // TODO Auto-generated method stub 
     // Use the current date as the default date in the picker 
     DatePickerDialog dialog = new DatePickerDialog(BookingFormActivity.this, this, startYear, startMonth, startDay); 
return dialog; 

    } 
    public void onDateSet(DatePicker view, int year, int monthOfYear, 
      int dayOfMonth) { 
     // TODO Auto-generated method stub 
     // Do something with the date chosen by the user 
     startYear = year; 
     startMonth = monthOfYear; 
     startDay = dayOfMonth; 
     updateStartDateDisplay(); 


    } 
    } 

można nazwać tego okna przez ustawienie tej metody onClick

public void showStartDateDialog(View v){ 
    DialogFragment dialogFragment = new StartDatePicker(); 
    dialogFragment.show(getFragmentManager(), "start_date_picker"); 
    } 
+0

Gdzie zaimplementowano 'updateStartDateDisplay'? W jaki sposób 'StartDatePicker' wie o tej metodzie? – MOnsDaR

36

Spróbuj tego.

Użyj tego kodu w kliknięciu przycisku. Zostanie wyświetlone okno wyboru daty.

  Calendar c = Calendar.getInstance(); 
    int mYear = c.get(Calendar.YEAR); 
    int mMonth = c.get(Calendar.MONTH); 
    int mDay = c.get(Calendar.DAY_OF_MONTH); 
    System.out.println("the selected " + mDay); 
    DatePickerDialog dialog = new DatePickerDialog(Registration.this, 
      new mDateSetListener(), mYear, mMonth, mDay); 
    dialog.show(); 

Następnie należy napisać klasę mDateSetListener.

class mDateSetListener implements DatePickerDialog.OnDateSetListener { 

     @Override 
     public void onDateSet(DatePicker view, int year, int monthOfYear, 
       int dayOfMonth) { 
      // TODO Auto-generated method stub 
      // getCalender(); 
      int mYear = year; 
      int mMonth = monthOfYear; 
      int mDay = dayOfMonth; 
      v.setText(new StringBuilder() 
        // Month is 0 based so add 1 
        .append(mMonth + 1).append("/").append(mDay).append("/") 
        .append(mYear).append(" ")); 
      System.out.println(v.getText().toString()); 


     } 
    } 

Proszę sprawdzić tę odpowiedź i zagłosuj.

+0

W jaki sposób importowany jest plik "Registration.this"? – Abbe

+1

@Abbe "Registration.this" jest po prostu odwołaniem do instancji działania o nazwie "Rejestracja", ponieważ 'DatePickerDialog' potrzebuje' Kontekstu', a każde 'Działanie' jest' Kontekstem'. Używasz 'ActivityName.this' zamiast tylko' this', gdy jesteś w innym zakresie, jak w detektorze zdarzeń. –

Powiązane problemy