2016-04-30 5 views
0

Ich habe eine übergeordnete DialogFragment namens TheParent und ein untergeordnetes Fragment namens TheChild, das TheParent erweitert.Aufrufen von newInstance() beim Erstellen eines untergeordneten Fragments, das ein übergeordnetes Fragment erweitert

Ich brauche aber noch einige Variablen in TheParent initialisieren zu können, obwohl ich TheChild bin instanziiert wird, so, was ich versucht war:

In der Mutter

public static TheParent newInstance(int myInt) { 
    Bundle args = new Bundle(); 
    TheParent fragment = new TheParent(); 
    args.putInt(ARGUMENT_MYINT, myInt); 
    fragment.setArguments(args); 
    return fragment; 
} 

und dann in dem Kind:

Allerdings mag es mich nicht, dies wegen des statischen Kontextes zu tun.

Wie lautet die richtige Methode, um NewInstance() in TheChild aufzurufen und newInstance() des übergeordneten Elements aufzurufen?

Antwort

1

Statische Methoden, wie eine neue Instanz in TheParent, sind "Klassenmethoden". Anstatt also super.newInstance aufzurufen, sollten Sie TheParent.newInstance (...) aufrufen. Denken Sie daran, dass statische Methoden nur über den Klassennamen aufgerufen werden können. Ich hoffe es hilft. Alles, was gesagt wird, die NewInstance-Methode in TheChild hat einen Rückgabewert vom Typ "TheChild". Dies bedeutet, dass die Rückgabe einer "TheParent" -Instanz unmöglich wäre. Dies würde zu einem Kompilierzeitfehler führen, den Sie sehen, sobald Sie den Code in TheChild ändern von: "return super.newInstance()" in "TheParent.newInstance"() ".

+0

Wie kann ich das Kind richtig deklarieren/einrichten, wenn der Elternteil ein Argument benötigt, um eingerichtet zu werden? Das übergeordnete Element benötigt myInt –

+0

Setzen Sie den Initialisierungscode in der übergeordneten Klasse in einem privaten Konstruktor, der ein int übernimmt. Rufen Sie dann diesen Konstruktor von TheParent.newInstance und übergeben Sie es myInt. In der Klasse TheChild benötigen Sie dann einen Konstruktor, der auch ein int aufruft und super (myInt) aufruft, was der Elternkonstruktor ist, den Sie gerade erstellt haben, und in TheChild.newInstance rufen Sie diesen Konstruktor in TheChild auf und übergeben ihn myInt. Auf diese Weise führen sowohl das Kind als auch das Elternelement den Elterninitialisierungscode aus, und das in TheChild erstellte Fragment hat den Typ TheChild und nicht TheParent. –

0

Dies ist, was ich in dem Kind die gesamte Logik aus, die Klasse zu wiederholen zu halten hat: einen Moment

public static TheChild newInstance(int myInt) { 
    TheChild fragment = new TheChild(); 
    fragment.setArguments(TheParent.newInstance(myInt).getArguments()); 
    return fragment; 
} 

Natürlich schafft diese Lösung eine zweite Instanz von TheParent.

Verwandte Themen