web-dev-qa-db-fra.com

Retour des données au fragment précédent à partir du fragment actuel

J'utilise le tiroir de navigation dans mon application. J'ai une activité principale et le reste sont des fragments. Donc, le problème est Supposons que j'ai trois fragments comme A, B, C.

Maintenant, dans A, j'ai un bouton et j'envoie des données de A> B.
Par exemple putSring ("datafrom A", "datafrom A");
Maintenant en B je reçois des données de A.
J'ai un bouton en B et j'envoie des données de B> C.
Par exemple putSring ("datafrom B", "datafrom B");
Maintenant en C je reçois des données de B.
Ensuite, j'ai un bouton en C et j'envoie des données de C> B.
Par exemple putSring ("datafrom C", "datafrom C");

Il semble donc qu'en B, j'obtiens des données de deux fragments différents. J'ai essayé avec toutes les activités et cela fonctionne bien avec startActivityforresult. mais comment puis-je gérer quand tous sont des fragments.

15
chris

Lorsque vous envoyez les données du fragment A au fragment B, utilisez le même booléen que ci-dessous: -

FragmentA -> FragmentB

FragmentB ldf = new FragmentB ();
Bundle args = new Bundle();
args.putBoolean("BOOLEAN_VALUE",true);
ldf.setArguments(args);

getFragmentManager().beginTransaction().add(R.id.container, ldf).commit();

Et lorsque vous envoyez des données du fragment C au fragment B, utilisez le même BOOLEAN qui est utilisé dans le fragment A à B comme ci-dessous-

FragmentC -> FragmentB

FragmentB ldf = new FragmentB ();
    Bundle args = new Bundle();
    args.putBoolean("BOOLEAN_VALUE",false);
    ldf.setArguments(args);

    getFragmentManager().beginTransaction().add(R.id.container, ldf).commit();

Et dans le dernier nous devons vérifier que la valeur est reçue dans FragmentB est d'où comme Fragment A OR FragemntC

FragmentB

   Boolean getValue= getArguments().getBoolean("BOOLEAN_VALUE");  
   if(getValue)
   {
    //VALUE RECEIVED FROM FRAGMENT A
   }
   else
   {
   //VALUE RECEIVED FROM FRAGMENT C
   }
5
Ravindra Kushwaha

Vous pouvez appeler setTargetFragment () lorsque vous démarrez le fragment C à partir de B. Exemple:

FragmentC fragmentC = FragmentC.newInstance();
fragmentC.setTargetFragment(FragmentB.this, REQUEST_CODE);
getFragmentManager().beginTransaction().replace(R.id.container, fragmentC).commit();

puis lorsque vous souhaitez transmettre des données au fragment B à partir de C, vous pouvez appeler le code suivant:

getTargetFragment().onActivityResult(
                getTargetRequestCode(),
                Activity.RESULT_OK,
                new Intent().putExtra("datafrom C", "datafrom C")
);

et obtenez-le de la méthode onActivityResult () dans votre fragment B:

@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
    if (requestCode==REQUEST_CODE && resultCode==Activity.RESULT_OK) {
        String datafromC = data.getStringExtra("datafrom C");   
    }
}
53
CodePlay