0
votes

Fragment sur d'autres fragments apparaissant après venu de fond

J'utilise le code ci-dessous qui utilise la navigation inférieure et affiche 3 fragments différents. Le code fonctionne parfaitement. Mais la question est parfois lorsque l'application est en arrière-plan pendant trop longtemps et que l'utilisateur revient à l'écran, le premier fragment est affiché parfaitement, mais en cliquant sur la deuxième et la troisième onglet, la vue est déformée, c'est-à-dire le contenu des premier et et deuxième ou les premier et troisième fragments apparaissent superposés. xxx

}

Comment résoudre ce problème? Toute aide


2 commentaires

Plutôt que d'utiliser la peau, vous devez utiliser Remplacer dans la transaction de fragment


Remplacera détruire le fragment et le recréer est un travail approfondi pour nous car il y aura plusieurs appels d'API


3 Réponses :


0
votes

Vous pouvez ajouter un seul fragment à une heure surCréate après le clic de la navigation inférieure, remplacez un fragment et dans votre fichier XML n'ajoute aucune classe de fragment. xxx


2 commentaires

Le problème pourquoi je n'ai pas utilisé cette approche, c'est lorsque les données de la première charge de fragments ont une dépendance pour mettre à jour les données du deuxième fragment. Dans ce cas, l'application s'écrasera comme il n'y aura pas de fragment avaïtique


Si vous souhaitez mettre à jour les données dans le deuxième fragment, vous pouvez utiliser une méthode OnFragmentVisibleVisible. Ce qui est appelé à chaque fois lorsque le fragment est visible pour l'utilisateur.



0
votes

Essayez de cette façon

Créer une vue pour la transaction de fragments xxx

et dans votre classe, remplacez la disposition de trame avec fragment en utilisant xxx


0 commentaires

0
votes

Le deuxième élément de cette réponse est probablement ce qui produise l'effet visuel que vous décrivez (un fragment sur l'autre), mais les points 1 et 3 sont également un aspect imposant que vous devriez envisager.

1) tenant sur les instances de fragments.

Comme les instances peuvent être détruites et recréées, au lieu de tenir des instances de fragments ( fragment1 , fragment1 , fragment3 ), gardez simplement une référence à la chaîne d'étiquette de fragment. La façon dont vous l'avez maintenant, le fragment à l'écran peut être une autre instance différente de celle que vous retenez dans l'activité qui aurait dû être recueillies. (une fuite de mémoire)

Lorsque vous devez faire quelque chose avec le fragment, utilisez supportfragmentManager.findfragmentByTag (thegragmenttag);

2) Création de fragmet dans l'activité OnCreate

dans l'activité Oncreate (SavedBundle) , Créez les fragments uniquement lorsque SavedBundle est null. Sinon, des fragments commenceront à dupliquer et de montrer probablement le comportement que vous décrivez d'un sur l'autre.

3) Les fragments peuvent être détruits lors d'une backagrante

suppose que le fragment peut être détruit lorsqu'il n'est pas à l'écran, alors enregistrez et restaurez les informations dont vous avez besoin. Enregistrer dans Onpause () , restaurez en fonction de vos besoins: Onresume () , SETUserVisibleHint (Boolean)

REMARQUE: Si l'interface utilisateur doit être rafraîchie lorsque le fragment devient visible, OnResume () seul ne fera pas le travail car il a peut-être déjà été appelé lorsque son fragment de voisinage est devenu visible. Dans cette situation, vous devrez combiner onresume () avec setaserservisiblehint (true) afin de coordonner quand rafraîchir l'interface utilisateur.


0 commentaires