Android Fragment Aufblasen layout
Hallo, ich arbeite mit einem view pager und Fragmente. Ich möchte überschreiben Ausrichtung ändert sich so, dass die onCreateView Methode nicht ausführen jedesmal, wenn sich die Orientierung ändert. Dies ist, weil eine Menge ist in onCreateView für meine app, die bewirkt, dass die Orientierung an langsam zu ändern. Auch Dinge, die auf meinem server überprüft, und was nicht, auch es gibt also wirklich keinen Grund, für alles zu laufen, nur weil die Ausrichtung geändert.
Hier ist, was ich habe, so weit
Habe ich diese auf der MainActivity in der manifest -
android:configChanges="orientation|keyboardHidden"
Und dann bin ich mit diesem in meiner fragment
@Override
public void onConfigurationChanged(Configuration newConfig) {
super.onConfigurationChanged(newConfig);
getLayoutInflater(getArguments()).inflate(R.layout.main, null, false);
Toast.makeText(getActivity(), "changed orientation", Toast.LENGTH_LONG).show();
}
Wenn ich die app starte und switch-Orientierung sehe ich die toast-show, aber das layout ändert sich nie in die Landschaft ein. Also habe ich beschlossen, dass vielleicht android war einfach nicht zu erkennen, dass es in der Landschaft, da ich overrided es aber, das layout zu verändern, um etwas lächerliches wie ein layout für einen dialog nicht zu einem force close oder nichts es bleibt im hochformat, der sich als ein Ergebnis, damit ich weiß, es ist etwas falsch mit dem, wie ich bin aufblasen des layout.
Jede Hilfe auf das layout zu verändern, wenn die Orientierung geändert wird, in einem viewpager würde sehr geschätzt werden.
Danke!
Du musst angemeldet sein, um einen Kommentar abzugeben.
1) sollten Sie alle Ihre server Prüfroutinen und andere einmalige Vorgänge im Fragment onCreate(), nicht onCreateView(). Wenn Sie brauchen, um irgendeine Art von "Loading..." - Bildschirm, während es lädt, dann würde ich empfehlen, mit einem FragmentActivity aufblasen, um ein layout mit mindestens einem FrameLayout mit einer "Loading..." - Typ von Grafik. Erstens, die FragmentActivity ausgeführt wird onCreate(), in dem das aufblasen der ersten Ansicht und erst dann zu instanziieren, das Fragment. Legen Sie die server-checking code in das Fragment onCreate(), und bläst dann alle Anzeigen für dieses Fragment in der onCreateView () - Methode. Hier ist ein Beispiel aus einem meiner Projekte initialisiert, ein Mikrofon-Taste, das ist wirklich ein fragment:
Dann, das Mikrofon fragment ist tatsächlich instanziiert der folgende Java-code:
FRAG_TAG ist eigentlich eine eindeutige tag-Namen, die Sie geben, um eine fragment-Instanz, die anders als die R. id des fragments. Auf diese Weise können Sie verwenden findFragmentByTag (), um sicherzustellen, dass Fragmente erhalten instanziiert, korrekt in allen Orten, die Sie Sie benötigen.
Können Sie massage dieser code ein wenig, wenn Sie auf der Suche nach Last-Fragmente in Fragmenten, wie meine Anwendung tatsächlich funktioniert. Wenn Sie ein Fragment, das aufblasen eines von mehreren möglichen Sichten, dann verwenden Sie eine if-Anweisung, um die entsprechenden frame-ID und ein eindeutiger FRAG_TAG. Ich würde raten, mit distinct R. id ' s für jede FrameLayout, die Sie für ein Fragment. (Zum Beispiel, wenn das Fragment könnte aufblasen verschiedenen Ansichten für die Info, Summen und Texte, dann ist mein tag-Namen für jedes Mikrofon fragment wäre MetaMicButton, HumMicButton, und LyricsMicButton. Ich müsste auch wählen zwischen R. id.meta_mic_button_frame und so weiter.)
2) Beim Wechsel zwischen hoch-und Querformat-Modi, die Sie brauchen, um zu definieren, verschiedene XML layouts in den Ordner res/layout " und " res/layout_land. (Oder man könnte die res/layout " und " res/layout_port wenn Sie wollen, zu betrachten, landscape-Modus, die standardmäßig verwendet werden). Bitte überprüfen Sie diesen link: http://developer.android.com/guide/topics/resources/providing-resources.html#AlternativeResources definieren Sie unterschiedliche layouts basierend auf Bildschirmgröße, Sprache, dock-Modus, Nacht-Modus und eine beliebige Kombination davon.