Question

Salut Je travaille avec un téléavertisseur de vue et des fragments. Je voudrais passer outre l'orientation change de sorte que la méthode onCreateView ne fonctionne à chaque fois que les changements d'orientation. En effet, un lot est exécuté dans onCreateView pour mon application qui provoque l'orientation à la lenteur du changement. Aussi les choses sur mon serveur sont vérifiées et ce pas trop donc il n'y a vraiment aucune raison pour tout cela à courir juste parce que l'orientation a changé.

Voici ce que j'ai mis en place à ce jour

Je présente sur le MainActivity dans le manifeste

 android:configChanges="orientation|keyboardHidden"

Et puis je l'utilise dans mon 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();
}

Quand je lance l'application et l'orientation commutateur je vois le spectacle de pain grillé, mais la mise en page ne change jamais à celle du paysage. Alors j'ai décidé que peut-être android juste ne reconnaissait pas qu'il était dans le paysage depuis que j'overrided mais en changeant la disposition à quelque chose de ridicule comme une mise en page pour une boîte de dialogue ne provoque pas de fermer la force ou quoi que ce soit il reste la mise en page de portrait qui est tendu suite donc je sais qu'il ya quelque chose de mal avec la façon dont je suis gonfler la mise en page.

Toute aide sur la modification de la mise en page lorsque l'orientation est modifiée dans un viewpager serait grandement apprécié.

Merci!

Était-ce utile?

La solution

1) Vous devriez mettre toutes vos routines de contrôle du serveur et d'autres opérations ponctuelles dans Fragment onCreate (), non onCreateView (). Si vous avez besoin de montrer une sorte de « Chargement ... » écran pendant qu'il charge, alors je vous conseille d'utiliser un FragmentActivity pour gonfler une mise en page avec au moins un FrameLayout que contient un type de graphique « Chargement ... ». Tout d'abord, le FragmentActivity se déroulera onCreate (), dans lequel il gonflera la vue initiale d'abord et puis instancier le fragment. Mettez le code de vérification du serveur dans onCreate () du fragment, puis gonfler tout Voir pour ce fragment dans la sa méthode onCreateView (). Voici un exemple d'un de mes projets initialisant un bouton de microphone, qui est vraiment un fragment:

<FrameLayout
       android:id="@+id/recorder_mic_fragment"
       android:layout_width="match_parent"
       android:layout_height="wrap_content"
       />

Ensuite, le fragment de microphone est en fait instancié par le code Java suivant:

// make the Mic button
FragmentManager fragMgr = getFragmentManager();
FragmentTransaction xact = fragMgr.beginTransaction();
if (null == fragMgr.findFragmentByTag(FRAG_TAG)) {
    xact.add(R.id.mic_button_frame, MicFragment.newInstance(queryType), FRAG_TAG).commit();
}

FRAG_TAG est en fait un nom de balise unique que vous donnez à une instance de fragment qui est différent du R.id du fragment. De cette façon, vous pouvez utiliser findFragmentByTag () pour faire des fragments sûrs se correctement instanciés dans tous les endroits où vous les avez besoin.

Vous pouvez masser ce code un peu si vous cherchez à charge dans les fragments fragments, comme la façon dont mon application fonctionne réellement. Si vous avez un fragment qui gonflera l'une de plusieurs vues possibles, utilisez une instruction if pour choisir l'ID de trame approprié et désigner un FRAG_TAG unique. Je conseillerais à l'aide R.id distincte de chaque FrameLayout que vous créez pour un fragment. (Par exemple, si ce fragment pourrait gonfler des vues différentes pour plus d'informations, Hum et Lyrics, mes noms d'étiquette pour chaque fragment de microphone serait MetaMicButton , HumMicButton et LyricsMicButton . Je dois aussi choisir entre R.id.meta_mic_button_frame et ainsi de suite.)

2) Lorsque vous passez entre les modes Portrait et Paysage, vous devez définir différentes mises en page XML dans les dossiers res / mise en page et res / layout_land. (Ou vous pouvez faire res / mise en page et res / layout_port si vous voulez considérer le mode paysage pour être la valeur par défaut). S'il vous plaît vérifier ce lien: http://developer.android.com/ Guide / sujets / ressources / fournir-resources.html # AlternativeResources Vous pouvez définir différentes mises en page en fonction de la taille de l'écran, la langue, le mode dock, mode nuit, et toute combinaison de ceux-ci.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top