J'essaie de faire quelque chose que je fais avec des activités, mais dans un fragment. Ce que je fais, c'est utiliser des activités:
Arrêtez d'abord l'activité redémarre lors de la rotation du périphérique
dans mon activité Ajouter: P> Android: configchange = "KeyboardHÉDITS | Orientation | Screensize" Code> P>
LayoutInflater inflater = inflater = (LayoutInflater) getApplicationContext().getSystemService(Context.LAYOUT_INFLATER_SERVICE);
view = inflater.inflate(R.layout.frg.myFragment, null);
...
LayoutInflater vi = (LayoutInflater) getContext().getSystemService(Context.LAYOUT_INFLATER_SERVICE);
view = inflater.inflate(R.layout.frg.myFragment, null);
...
LayoutInflater inflater = (LayoutInflater) context.getSystemService( Context.LAYOUT_INFLATER_SERVICE );
view = inflater.inflate(R.layout.frg.myFragment, null);
...
LayoutInflater li = LayoutInflater.from(context);
5 Réponses :
Peut-être que vous pouvez essayer d'utiliser . Dans tous les cas, le fragment doit encore être détruit et recréé, pourquoi ne pas laisser Android le gérer automatiquement en redémarrant l'activité? S'il y a des données à conserver, vous pouvez l'enregistrer dans OnsaveDInstanCestate () Code>. Réglage
Android: configchange = "KeyboardHésdité | Orientation | Screensize" Code> n'est pas recommandé dans Android. P> P>
Si je comprends correctement, vous ne voulez pas le fragment pour recharger sur chaque rotation. Au lieu de cela, vous voulez relancer les vues et les mettre à jour avec des informations que vous avez déjà.
public void onConfigurationChanged(Configuration newConfig) { super.onConfigurationChanged(newConfig); // Get a layout inflater (inflater from getActivity() or getSupportActivity() works as well) LayoutInflater inflater = (LayoutInflater) getApplicationContext().getSystemService(Context.LAYOUT_INFLATER_SERVICE); View newView = inflater.inflate(R.layout.frg.myFragment, null); // This just inflates the view but doesn't add it to any thing. // You need to add it to the root view of the fragment ViewGroup rootView = (ViewGroup) getView(); // Remove all the existing views from the root view. // This is also a good place to recycle any resources you won't need anymore rootView.removeAllViews(); rootView.addView(newView); // Viola, you have the new view setup }
Je pense que c'est une très bonne solution, mais je reçois une force proche et je ne sais pas pourquoi. Je mettais un lien vers les journaux ul.to/arq9y8gj sur les journaux, j'ai également essayé sans utiliser Actionbarcherlock, l'erreur persiste
Vérification du journal des erreurs, il semble que vous ayez une erreur de fragment en double. Vérifiez cette solution Stackoverflow.com/Questtions/14083950/...
Merci travaillé comme un charme
Si vous avez une autre mise en page que supérieure à gauche à votre vue, vous devez définir les paramètres de la mise en page sur la nouvelle vue. Vous pouvez obtenir ceci depuis le précédent bien que: Viewgroup.layoutParams LP = rootview.getchildat (0) .getlayOutparams (); Newview.setlayoutparams (LP); Code>
J'ai essayé: Voir nouvellement gonfler.inflate (r.layout.frg.myfragment, null); Mais a obtenu un avertissement, j'ai donc modifié le code un peu: (1) Je déclare racare rootview d'abord (2) appelez cela à la place "Voir nouvellement vue #fater.inflate (r.layout.my frag, rootview, faux);" Le résultat final fonctionne de la même manière, mais sans l'avertissement. :)
Merci beaucoup, ça a fonctionné comme un charme! Vous pouvez simplement déclarer View finale NewView = vue.inflate (getactivité (), r.layout.frg.myfragment, null); code> sans avoir une instance de layoutinfater :)
PS: Si vous utilisez Butterknife, n'oubliez pas d'ajouter Butterknife.Inject (Ceci, NewView); code>
Avez-vous envisagé de conserver vos instances de fragment? Voir Fragment # Seretatanstance . P>
Autoriser votre activité à être recréé (ne spécifiez pas Android: configchange) mais conserver vos instances de fragment à travers les modifications d'orientation. Si toute la levée lourde arrive dans le fragment # surcree, cela devrait fonctionner bien. Oncreate () ne sera plus appelé puisque le fragment n'est pas recréé. p>
OnCréateView () est appelé à nouveau pour créer une nouvelle hiérarchie de vue. Il devrait être possible de conserver les bitmaps et de les réutiliser dans les vues nouvellement créées.
Je pourrais le faire en réattachant le fragment dans ONCONFIGRATURECHANGED:
@Override public void onConfigurationChanged(Configuration newConfig) { getActivity().detachFragment(this); super.onConfigurationChanged(newConfig); .... getActivity().attachFragment(this); }
ACTIVITÉ
Vous pouvez essayer de @Override
public void onConfigurationChanged(Configuration newConfig) {
FragmentManager fragmentManager = getFragmentManager();
if (fragmentManager != null) {
fragmentManager.beginTransaction().detach(this).commitAllowingStateLoss();
}
super.onConfigurationChanged(newConfig);
if (fragmentManager != null) {
fragmentManager.beginTransaction().attach(this).commitAllowingStateLoss();
}
}
Votre question n'est pas claire du tout. Essayez-vous de recréer les fragments après une rotation?
Mon intention est que, après la rotation du périphérique, ne redémarre pas l'activité, mais l'encombréement change du fragment, rechargez la mise en page XML
Vous allez rencontrer des problèmes avec
Android: configchange code> car, pour la plupart, vous ne devriez pas l'utiliser. Il existe de nombreux types de modifications de configuration que vous ne comptez pas.
OnsaveDInstancestate CODE> Votre ami est votre ami.
J'utilise des bitmaps dans les fragments qui sont automatiquement redimensionnés si les fragments se rechargent chaque fois que vous faites pivoter le périphérique, j'ai le problème de la "mémoire de mémoire". La première charge est contrôlée, mais pas le reste (comment la rotation), donc j'ai besoin de charger une seule fois
Remplacer
Android: configchange code> à cause de bitmaps est une mauvaise excuse. Vous devez persister les bitmaps entre les modifications de configuration via
OnsaveDInstanCestate code>.
@JaySoyer Vous ne pouvez pas persiste des bitmaps dans le paquet. Miguelc: On dirait que vous avez un problème avec trop de bitmaps ou des fuites de mémoire (plus probables). L'utilisation de configchanges dans ce dernier cas est comme être un médecin qui tente de guérir des symptômes et non la cause.
@ Maciejgórski Je n'ai jamais dit qu'il devait utiliser un paquet. Juste que cela doit être persisté. Remarque, le bitmap implémente Parcelable, donc je ne vois aucune raison pour laquelle on ne pouvait pas la mettre dans un paquet avec sa méthode Putparcelable ();
@JaySoyer Oh, ça fait. J'aurais dû vérifier avant de faire un problème;)