0

J'ai 2 fragments. Dans le premier fragment, il y a une liste des éléments que je récupère sur un serveur. et quand je clique sur un élément de la liste, il va naviguer vers le second fragment avec les détails de l'élément sur lequel j'ai cliqué. mais quand je repasse et navigue vers le fragment précédent, je dois passer par le même processus d'extraction des données du serveur. Y a-t-il un moyen d'éviter cela? puis-je revenir au fragment précédent sans faire à nouveau cette demande de réseau?Fragment appelle à nouveau le même appel réseau

+0

Oui, il y a plusieurs façons d'éviter. – Piyush

+1

Peut-être que vous utilisez remplacer pour la transaction de fragment? Utiliser add peut aider (pour que le fragment ne soit pas supprimé). Il serait utile si vous pouvez ajouter du code.Vous pouvez vous référer à ce https://developer.android.com/guide/components/fragments.html#Transactions –

+0

Oui, j'utilise la méthode de remplacement. Est-ce la raison de ce problème? à cause du remplacement du fragment précédent doit passer à nouveau à l'état de créer en revenant? – slenderm4n

Répondre

0

Je ne sais pas quelle méthode vous avez utilisée pour revenir en arrière. Je pense que c'est parce que vous avez surchargé la méthode onBackPress et chargez le fragment à travers la transition de fragment. Lorsque vous appuyez à nouveau sur le bouton, le fragment est créé et un nouvel objet fragment de copie est créé. Si vous pouvez éviter que l'appel réseau n'appelle plus.

Vous pouvez l'essayer. Remplacer la méthode onbackpress.

@Override 
public void onBackPressed() { 
    int count = getSupportFragmentManager().getBackStackEntryCount(); 
    if (count == 0) { 
     navigateActivity(HomeActivity.class); 
    } else { 
     getSupportFragmentManager().popBackStackImmediate(); 
    } 
} 

Et commencer à nouveau fragment comme suit,

public void switchFragment(Fragment frag) { 
    String backStateName = fragment.getClass().getName(); 

    FragmentManager manager = getSupportFragmentManager(); 
    boolean fragmentPopped = manager.popBackStackImmediate (backStateName, 0); 

    if (!fragmentPopped){ 
     fragmentTransaction = getSupportFragmentManager().beginTransaction(); 
     fragmentTransaction.replace(R.id.report_fragment, frag); 
     fragmentTransaction.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_FADE); 
     fragmentTransaction.addToBackStack(backStateName); 
     fragmentTransaction.commit(); 
    } 

}

Espérons que cela aidera.