Fragments et de changement d'Orientation
Quelle est la bonne façon de gérer un changement d'orientation lors de l'utilisation de Fragments?
J'ai un paysage de mise en page qui contient 2 fragments (instancié dans le code en FrameLayout
s). Quand je passer en mode portrait (la mise en page qui ne contient qu'une seule FrameLayout
qui détient le volet de gauche uniquement), la main droite fragment n'est plus nécessaire.
Je reçois un message d'erreur:
E/AndroidRuntime(4519): Caused by: java.lang.IllegalArgumentException: No view found for id 0x7f060085 for fragment myFragment{418a2200 #2 id=0x7f060085}
qui est supposer, c'est mon activité en essayant de re-fixer le fragment où il était avant le changement d'orientation, mais que la vue qui contient le fragment n'existe pas en mode portrait, l'erreur est levée.
J'ai essayé les masquer/supprimer/détacher méthodes, mais l'erreur persiste. Quelle est la bonne manière de raconter un fragment, il n'est pas nécessaire, pas plus, et n'essayez pas d'affichage?
@Override
public void onCreate(Bundle b) {
super.onCreate(b);
Fragment f = getSupportFragmentManager().findFragmentById(R.id.fragholder2);
//rightPane is a framelayout that holds my fragment.
if (rightPane == null && f != null) {
FragmentTransaction ft = getSupportFragmentManager().beginTransaction();
ft.hide(f); //This doesnt work
ft.remove(f); //neither does this
ft.detach(f); //or this
ft.commit;
}
}
- Même question, mais la solution n'aide pas dans mon cas, pour une raison quelconque. stackoverflow.com/questions/6164341/...
- Ce blog fournit toutes les options de manipulation de changement d'orientation techrepublic.com/blog/android-app-builder/...
- Ooops! ne pas vérifier la date. De toute façon j'ai seulement liés qu'il affiche toutes les options disponibles et m'a vraiment aidé. Comme vous le savez, le code est disponible dans les solutions d'ici et d'ailleurs, d'où a soumis un commentaire plutôt qu'une solution. Je ne savais pas trop comment faire autrement pour contribuer à cette info que j'ai trouvé très utile.
Vous devez vous connecter pour publier un commentaire.
J'ai rencontré le même problème et je pense que j'ai trouvé une autre solution. Cette solution peut être mieux parce que vous n'avez pas à ajouter le fragment de la pile de retour.
Supprimer le côté droit fragment de votre activité dans
Activity.onSaveInstanceState()
avant appelsuper.onSaveInstanceState()
. Cela fonctionne pour moi:Si vous faites de la rétention de l'fragment, essayez de ne pas les conserver.
au lieu de
Habituellement, vous aurez deux fragments (gauche/droite), une activité principale et une activité conteneur pour le droit fragment (uniquement lorsqu'ils sont présentés sur les appareils de téléphone). Ceci est décrit dans cette entrée de blog: Android 3.0 Fragments de l'API
Si vous avez des deux volet de l'activité avec un gauche et à droite du volet et l'un des volets (généralement le volet de droite) est supposé s'affichent pas lorsque l'appareil passe en mode portrait, laissez-Android faire sa chose et de recréer le volet de droite. Mais au cours de la onCreateView du volet de droite, la première chose que vous devez faire est de vérifier si l'un des éléments de mise en page utilisé par le volet est encore disponible. Si elle n'est pas, retirer le fragment à l'aide de la FragmentManager et de revenir immédiatement:
Je pense que j'ai résolu.
J'ai ajouté le fragment de la pile de retour et puis avant l'activité de la ferme sauté hors de nouveau, ce qui a effectivement de se débarrasser d'elle. Semble fonctionner pour autant.
Android ne recrée les deux fragments au cours de la rotation de l'écran. Mais si vous ajoutez de la case ci-dessous dans onCreateView() il va vous empêcher de questions:
J'ai pris cette de Les Développeurs Android blog.
Vous n'avez pas besoin de cette activité plus parce que le fragment sera affiché en ligne. Ainsi, vous pouvez terminer l'activité