2013-07-16 20 views
7

Ich erstelle eine App, die Daten in einem ListView anzeigt. Die Daten sind in zwei Arten kategorisiert (Popular, Favorites). Ich habe eine Aktivität und zwei Fragmente. Die Fragmente zeigen eine Liste von Elementen basierend auf ihrer Kategorie an. Ich habe dafür einen ListView verwendet. Ich habe dann zwei fragment_layouts, die im Design genau gleich sind, aber unterschiedliche Ansichts-IDs haben, dh tvId1, tvId2 für TextViews. Die Codes in den Fragmenten unterscheiden sich nur darin, dass sie ihr Layout und ihre Ansichten im Layout referenzieren. Ich erhalte Daten von einer URL im JSON-Format. Jede Kategorie hat jedoch einen anderen URL-Satz, der die gleiche Struktur nur unterschiedlicher Daten erzeugt. Ich parse dann die entsprechende URL auf jedem Fragment und fülle die ListView entsprechend auf. Alles funktioniert so weit.Android - Instantiate ein Fragment mehrmals?

Was ich wissen möchte, gibt es eine Möglichkeit, dass ich nur ein Fragment verwenden und es zweimal mit unterschiedlichen Datensätzen verwenden kann? Auf diese Weise muss ich kein neues Fragment erstellen, wenn eine neue Kategorie erscheint.

Schätzen Sie jede Hilfe.

Antwort

10

Natürlich können Sie tun. Eigentlich solltest du es so machen.

Wenn Sie das Fragment erstellen, verwenden Sie nicht new Fragment(); Erstellen Sie eine statische newInstance-Funktion, die die Daten als Argument verwendet.

public static MyFragment newInstance(int type) { 
    MyFragment fragment = new MyFragment(); 
    Bundle args = new Bundle(); 
    args.putInt("type", type); 
    fragment.setArguments(args); 
    return fragment; 
} 

Und dann können Sie den Typ auf onCreate get() Methode unter:

getArguments().getInt("type"); 

Und dann bekommen Sie die Art, können Sie Ihre webservice entsprechend rufen, und dann können Sie die Views eingestellt entsprechend.

+0

Vielen Dank. Lief wie am Schnürchen. Ersparte mir eine Menge Ärger. Ich würde abstimmen, aber ich habe noch nicht genug Ansehen. – user2469412

+0

Kein Problem. :) Glückliche Codierung. – tasomaniac