2014-02-17 13 views
8

Ich bin auf der Suche nach einer Möglichkeit, die Datumsauswahl in Android nur den Tag und Monat (d. H. Kein Jahr) anzuzeigen.Android-Datumsauswahl mit nur Tag und Monat

Ich schaffe einen Dialog basierend auf How to display date picker for android with only month and year fields?:

Dialog dlg = new DatePickerDialog(context, datePickerListener, dueDateCalendar.get(Calendar.YEAR), dueDateCalendar.get(Calendar.MONTH), dueDateCalendar.get(Calendar.DAY_OF_MONTH)); 
    try { 
     Field f[] = dlg.getClass().getDeclaredFields(); 
     for (Field field : f) { 
      String name = field.getName(); 
      if (name.equals("YEAR")){ 
       field.setAccessible(true); 
       Object dayPicker = new Object(); 
       dayPicker = field.get(dlg); 
       ((View) dayPicker).setVisibility(View.GONE); 
      } 
     } 
    } catch (Exception e){ 
     // TODO: should not happen 
     e.printStackTrace(); 
    } 
    return dlg; 

aber ich halte eine Guss Ausnahme auf ((View) dayPicker) .setVisibility (View.GONE) bekommen;

java.lang.ClassCastException: java.lang.String kann nicht auf android.view.View

Irgendwelche Ideen geworfen werden?

Antwort

17

Hier geben Sie das ein. Seine APIv11 +, aber es gibt andere Möglichkeiten auf niedrigeren API-Versionen.

DatePickerDialog dlg = new DatePickerDialog(context, datePickerListener, 
    dueDateCalendar.get(Calendar.YEAR), 
    dueDateCalendar.get(Calendar.MONTH), 
    dueDateCalendar.get(Calendar.DAY_OF_MONTH)); 
int year = context.getResources().getIdentifier("android:id/year", null, null); 
if(year != 0){ 
    View yearPicker = dlg.getDatePicker().findViewById(year); 
    if(yearPicker != null){ 
     yearPicker.setVisibility(View.GONE); 
    } 
} 
return dlg; 

Aktualisierter Code: Dies sollte die Aufgabe erledigen.

DatePickerDialog dlg = new DatePickerDialog(context, datePickerListener, 
    dueDateCalendar.get(Calendar.YEAR), 
    dueDateCalendar.get(Calendar.MONTH), 
    dueDateCalendar.get(Calendar.DAY_OF_MONTH)) 
{ 
    @Override 
    protected void onCreate(Bundle savedInstanceState) 
    { 
     super.onCreate(savedInstanceState); 
     int year = getContext().getResources() 
      .getIdentifier("android:id/year", null, null); 
     if(year != 0){ 
      View yearPicker = findViewById(year); 
      if(yearPicker != null){ 
       yearPicker.setVisibility(View.GONE); 
      } 
     } 
    } 
}; 
return dlg; 
+0

Ich habe den yearPicker in View geändert yearPicker = dlg.findViewById (year); um das Problem auf API-Ebene zu vermeiden, aber es entspricht, gibt aber null zurück. Irgendwelche Ideen? – checklist

+0

Aktualisierte den Code. – Simon

+2

Funktioniert auch für Lollipop! –

Verwandte Themen