2017-02-24 7 views
0

j'ai deux fragments, le fragment A et le fragment B. Le fragment A contient 4 onglets comme indiqué ci-dessous:applications: Mise à jour d'un fragment imbriqué provenant d'un autre fragment

enter image description here

Tab 3 offre une vue de recycler, à partir de laquelle l'utilisateur sélectionnera une option. Maintenant, l'utilisateur ira au fragment B, et fait quelque chose. Quand il a terminé, l'appel sera de nouveau au fragment A et maintenant l'onglet 4 sera mis en surbrillance et les données dans le 4ème onglet seront chargées. Jusqu'ici, je suis capable de revenir au fragment A. Mais à partir de là, je ne peux pas passer à l'onglet 4 et charger les données. Après vérification, j'ai trouvé que, lorsque le rappel revenait au fragment A, il n'était toujours pas visible. Par conséquent, l'onglet n'a pas été changé. Comment puis-je accomplir cela?

Répondre

0

Vous ne pouvez pas mettre à jour FragmentA directement parce qu'il est en pause. Ce que vous pouvez faire est de faire FragmentB un DialogFragment et utiliser targetFragment pour obtenir un résultat (un peu comme startActivityForResult)

En Fragmenta, à l'endroit où vous lancez FragmentB ajouter:

//RC_FRAGMENT_B is just an int constant to identify the result later 
fragmentB.setTargetFragment(FragmentA.this, RC_FRAGMENT_B); 

et mettons en œuvre:

public static final int RC_FRAGMENT_B = 1666; 
public static final int RC_SUCCESS = 1888; 

@Override 
public void onActivityResult(int requestCode, int resultCode, Intent data) { 
    if (requestCode == RC_FRAGMENT_B && resultCode == RC_SUCCESS) { 
     //change tab, etc. 
    } 
} 

Puis, en FragmentB, lorsque vous avez terminé, utilisez:

Fragment target = getTargetFragment(); 
if (target != null) { 
    //FragmentA.RC_SUCCESS result code needs to be a constant indicate to FragmentA what to do 
    target.onActivityResult(getTargetRequestCode(), FragmentA.RC_SUCCESS, getActivity().getIntent()); 
} 
+0

I ne peut pas convertir le fragment B en boîte de dialogue. Dans le fragment B, c'est une vue web, où je charge de l'argent auprès des utilisateurs. Y at-il un moyen de savoir quand le fragment devient visible? – Nitish

+0

Oui, la méthode onResume, mais FragmentA.onResume n'arrivera qu'après FragmentB.onPause (trop tard). Vous pouvez cependant placer ce que vous voulez dans une boîte de dialogue de fragment. Ce n'est pas la même chose qu'un AlertDialog –