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. } p> Comment résoudre ce problème? Toute aide p> p>
3 Réponses :
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.
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.
Essayez de cette façon
Créer une vue pour la transaction de fragments p> et dans votre classe, remplacez la disposition de trame avec fragment
en utilisant p>
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. P>
Comme les instances peuvent être détruites et recréées, au lieu de tenir des instances de fragments ( Lorsque vous devez faire quelque chose avec le fragment, utilisez dans l'activité 3) Les fragments peuvent être détruits lors d'une backagrante forte> p>
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 REMARQUE: Si l'interface utilisateur doit être rafraîchie lorsque le fragment devient visible, fragment1 code>,
fragment1 code>,
fragment3 code>), 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) p>
supportfragmentManager.findfragmentByTag (thegragmenttag); code> p>
Oncreate (SavedBundle) CODE>, Créez les fragments code> uniquement lorsque
SavedBundle code> est null. Sinon, des fragments commenceront à dupliquer et de montrer probablement le comportement que vous décrivez d'un sur l'autre. p>
Onpause () Code>, restaurez en fonction de vos besoins:
Onresume () code>,
SETUserVisibleHint (Boolean) Code> P>
OnResume () code> 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 () code> avec
setaserservisiblehint (true) code> afin de coordonner quand rafraîchir l'interface utilisateur. P>
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