2016-08-09 39 views
0

Im Moment mache ich eine App, die erfordert, dass ich 20 oder mehr verschiedene Seiten/Layouts habe, jeweils eins geladen, aber wenig/keine Interkommunikation zwischen ihnen. Sie würden sehr statisch sein. Im Moment hatte ich die Idee, eine Aktivität zu haben, ein Fragment, das ein anderes Layout in onCreateView aufblähen würde, und das Fragment würde jedes Mal neu geladen, wenn der Benutzer eine andere Seite auswählte. Ich habe jedoch festgestellt, dass das überhaupt nicht funktioniert, weil ich die return-Anweisung von onCreateView nicht in eine if-Anweisung schreiben kann, und keine Umgehungsarbeit.Was ist der effizienteste Weg, mit mehr als 20 verschiedenen statischen Layouts umzugehen?

So jetzt weiß ich nicht den effizientesten Weg, dies zu tun. Es gibt keine Möglichkeit mehr als 20 Layouts und mehr als 20 Klassen, eine für jede Seite ist ideal. Es scheint sehr überflüssig zu sein.

+1

Darf ich fragen, warum Sie so viele verschiedene Layouts haben? Sind das alle verschiedenen Bildschirme, die der Benutzer sehen kann? Gibt es Ähnlichkeiten zwischen diesen Layouts, die genutzt werden können? –

+0

@ Code-Apprentice 20 ist nicht so viele. Wenn Sie in einer nicht-trivialen App sind, werden Sie mindestens so viele haben –

+0

@GabeSechan Ich denke, dass alle meine Apps bisher ziemlich trivial gewesen sind ;-(Trotzdem denke ich, dass meine Folgefragen immer noch gültig sind. –

Antwort

0

Sie können das Paket des Fragments verwenden, um mit ihm zu kommunizieren, welches Layout verwendet werden soll. In der Fragment-Klasse, eine statische Methode erstellen Sie das Fragment Instanz zu erstellen und es ist Bündel, zum Beispiel ein:

public static MyFragment newInstance(int layoutId) { 
     MyFragment f = new MyFragment(); 
     Bundle args = new Bundle(); 
     args.putInt("layoutId", layoutId); // e.g. layoutId = R.layout.layout_fragment_01 
     f.setArguments(args); 
     return f; 
    } 

und dann in dem onCreateView fragmente, erhalten Sie die Layout-ID aus dem Bündel:

public View onCreateView(LayoutInflater inflater, ViewGroup container, 
         Bundle savedInstanceState) { 

    return inflater.inflate(getArguments().getInt("layoutId", 0), container, false); 
} 

dann in Ihrer Aktivität, würden Sie so etwas wie das folgende tun:

MyFragment fragment = MyFragment.newInstance(R.layout.fragment_layout_01); 
getFragmentManager().beginTransaction().add(android.R.id.content, fragment).commit();