findFragmentById() et findFragmentByTag()
J'ai créé un Fragment d'afficher mon recycleur de vue. j'ai donc utilisé la méthode findFragmentById() de trouver mon fichier xml. Le problème est que chaque fois que je la rotation de l'écran, il créé une plus recycleur vue piles sur le dessus de l'autre.
voici mon code:
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
ListFragment savedFragment = (ListFragment) getSupportFragmentManager().findFragmentById(R.id.list_recyclerview);
if(savedFragment == null)
{
ListFragment fragment = new ListFragment();
FragmentManager fragmentManager = getSupportFragmentManager();
FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();
fragmentTransaction.add(R.id.place_holder,fragment);
fragmentTransaction.commit();
}
}
Mais lorsque j'ai utilisé la méthode findFragmentByTag(), il ne s'est pas produit.
Quelqu'un peut m'expliquer ce que sont la différence entre ces 2 méthodes?
Vous ajoutez à votre fragment dans la vue avec l'id
c'est ma grosse erreur. je vous remercie beaucoup pour votre aide.
place_holder
, alors vous devez chercher l'aide de getSupportFragmentManager().findFragmentById(R.id.place_holder);
. Cette différence explique pourquoi findFragmentById
n'est jamais à trouver votre fragment.c'est ma grosse erreur. je vous remercie beaucoup pour votre aide.
OriginalL'auteur Luan Si Ho | 2017-04-20
Vous devez vous connecter pour publier un commentaire.
Cette méthodes permettent de récupérer un précédemment ajouté fragment exemple sans avoir besoin de garder une référence à ce fragment de l'instance. La différence entre les deux, se trouvent sur la façon dont ils le suivre, si de sa soit avec un TAG donné, que vous avez déjà affecté le fragment de transaction lorsqu'il a été ajouté, ou tout simplement en récupérant le dernier fragment dans le conteneur. Nous allons passer par les deux méthodes:
findFragmentByTag:
Cette méthode permet de récupérer l'instance précédemment ajouté fragment avec le tag donné quel que soit le conteneur, il a été ajouté. Cela est réalisé de la manière suivante:
Nous allons tout d'abord ajouter un fragment avec une BALISE:
Et puis de récupérer le fragment de l'instance:
Si
fragment
n'est pas nulle, cela signifie que vous avez obtenu l'exemple en se référant à la fragment de la BALISE. Gardez à l'esprit que, avec cette méthode, même quand vous obtenez l'instance, ne signifie pas que le fragment est visible ou ajouté au conteneur, ce qui signifie que vous devriez prendre un supplément de vérifier si vous voulez dire à manipuler quelque chose en elle, avec:findFragmentById:
Dans cette méthode, vous allez obtenir de l'instance de la dernier fragment de donnée pour le conteneur. Donc, nous allons faire semblant de nous ajouter un fragment de récipient sans tag (notez que vous pouvez aussi lui donner une étiquette et de les récupérer de cette façon):
Et ensuite de récupérer l'instance que vous utilisez le numéro du conteneur:
À ce moment, puisque nous avons utilisé
findFragmentById
nous savons que c'est le visible fragment de récipient de sorte que vous n'avez pas besoin de vérifier s'il est ajouté à un conteneur.Ravi de vous aider. Si il résolu votre problème de marque de la réponse comme correcte
si j'utilise trouver fragment par balise sur créer une vue appelée sur ce fragment? une fois retrive?
Non, vous venez juste d'obtenir le fragment de l'instance. Si vous ajoutez à cela le conteneur onCreateView sera appelé
OriginalL'auteur Ricardo