Datepicker DialogFragment erstellen

D

DrLiightninG

Neues Mitglied
1
Hallo zusammen,
ich bin gerade dabei ein Datepicker DialogFragment zu erstellen und habe dabei zwei Probleme.
Das DialogFragment soll beim Drücken eines Buttons erstellt werden. Dieser Button befindet sich in der inneren Klasse PlaceholderFragment. Die Zeile mit der Methode ".show()" des DialogFragments ist jedoch rot unterkringelt und zeigt folgenden Fehler an: " Cannot resolve method 'show(android.support.v4.app.FragmentManager, java.lang.String)' ".

Hier der Ausschnitt des Codes: (Aus PlaceholderFragment der Klasse MainActivity)
Code:
partyDatumEB.setOnClickListener(new View.OnClickListener() {
                        public void onClick(View v) {
                            // Perform action on click
                            DialogFragment newFragment = new DatePickerFragment();
                            newFragment.show(getActivity().getSupportFragmentManager(), "datePicker"); //Hier die Fehlerzeile
                        }
                    });

Zudem habe ich einen unterkringelten Fehler in der Klasse DatePickerFragment. Diese Klasse ist als static definiert und dabei erhalte ich folgenden Fehler: " Modifier 'static' not allowed here ". Bei der Android Development Seite wird die Klasse jedoch auch als static definiert. (Pickers | Android Developers)

Hier der Code:
Code:
import android.app.DatePickerDialog;
import android.app.Dialog;
import android.app.DialogFragment;
import android.os.Bundle;
import android.widget.DatePicker;

import java.util.Calendar;

/**
* Created by Jan on 20.03.2016.
*/
public static class DatePickerFragment extends DialogFragment //HIer der Fehler bei "static"
        implements DatePickerDialog.OnDateSetListener {

    @Override
    public Dialog onCreateDialog(Bundle savedInstanceState) {
        // Use the current date as the default date in the picker
        final Calendar c = Calendar.getInstance();
        int year = c.get(Calendar.YEAR);
        int month = c.get(Calendar.MONTH);
        int day = c.get(Calendar.DAY_OF_MONTH);

        // Create a new instance of DatePickerDialog and return it
        return new DatePickerDialog(getActivity(), this, year, month, day);
    }

    public void onDateSet(DatePicker view, int year, int month, int day) {
        // Do something with the date chosen by the user
    }
}

Ich hoffe jemand kann mir helfen.

Gruß
Jan
 
Zum ersten Fehler:
Dein DatePickerFragment erbt von android.app.DialogFragment, nicht android.support.v4.app.DialogFragment. Du willst diesem aber den FragmentManager aus der Support Lib geben. Man sollte es vermeiden support-lib Klassen und Framework Klassen zu vermischen, insbesondere im Fragment und Activity Umfeld. Also importier alles aus der support Lib und gut ist.

Zum zweiten:
Deine Klasse ist in einer eigenen Datei, da gibt es keinen static Modifier an der Klasse. Static Modifier gehen grundsätzlich nur innerhalb anderer Klassen, ob es dann an der Klasse, an Feldern oder Methoden hängt ist erstmal egal. Static heißt, dass die Klasse/das Feld/die Methode von außen erreichbar sind ohne dass man eine Instanz der umgebenden Klasse braucht.
 
Static ist ein Modifikator. Die Aussage von Deek gilt für statische Methoden und statischen Variablen. Für static class gilt das nicht. Von diesen kann man Instanzen bilden.

Java Blog Buch : 04.10 Innere Klassen

Erweitere es mal so, das nur static class eine umgeben Klasse haben. Sprich die statische Klasse ist eine innere Klasse.

Von außen erreichbar sind die Methoden, Variablen und Classen nur, wenn sie public sind. Es ist auch eine private Variante möglich. ;)

Nachtrag:

@deek meinte eigentlich, dass Methoden, Variablen und Klassen aufgerufen werden könne, ohne das deshalb ein Objekt (Instanz der Klasse) vorhanden sein muss.
 
Zuletzt bearbeitet:
@markus.tullius Genau, für den Part "von außen" muss es natürlich auch noch public sein ;) static bezieht sich in meinem Satz auf den Teil "ohne dass man eine Instanz der umgebenden Klasse braucht".

In diesem Fall macht es aber keinen Sinn um das DatePickerFragment eine weitere Klasse rumzubasteln, es reicht den static Modifier wegzunehmen.
 
deek schrieb:
In diesem Fall macht es aber keinen Sinn um das DatePickerFragment eine weitere Klasse rumzubasteln, es reicht den static Modifier wegzunehmen.
Ja hat funktioniert. Danke!

deek schrieb:
Dein DatePickerFragment erbt von android.app.DialogFragment, nicht android.support.v4.app.DialogFragment.
Hab es geändert. Hat dann aber erst funktioniert, als ich die Instanz von DatePickerFragment folgendermaßen erzeugt habe:
Code:
DatePickerFragment newFragment = new DatePickerFragment();
                            newFragment.show(getActivity().getSupportFragmentManager(), "datePicker");

@markus.tullius Danke für die zusätzlichen Infos :)

Gruß
Jan
 

Ähnliche Themen

5
Antworten
0
Aufrufe
1.150
586920
5
R
Antworten
6
Aufrufe
1.014
swa00
swa00
W
Antworten
2
Aufrufe
744
rene3006
R
Zurück
Oben Unten