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.
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
}
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");
}
}