Comment transférer certaines données vers d'autres Fragment
de même, cela a été fait avec extras
pour intents
?
Merci pour votre réponse mais devons-nous implémenter quelque chose comme Serializable ou Parcelable ?
Comment transférer certaines données vers d'autres Fragment
de même, cela a été fait avec extras
pour intents
?
Utilisez un Bundle
. Voici un exemple :
Fragment fragment = new Fragment();
Bundle bundle = new Bundle();
bundle.putInt(key, value);
fragment.setArguments(bundle);
Bundle a mis des méthodes pour de nombreux types de données. Voir este
Alors dans votre Fragment
, récupérer les données (par exemple dans onCreate()
) avec :
Bundle bundle = this.getArguments();
if (bundle != null) {
int myInt = bundle.getInt(key, defaultValue);
}
Merci pour votre réponse mais devons-nous implémenter quelque chose comme Serializable ou Parcelable ?
Vous pourriez ajouter un contrôle pour vérifier que bundle != Null avant de tenter d'en tirer quelque chose ?
Pour aller encore plus loin dans la réponse précédente, comme le disait Ankit, pour les objets complexes, vous devez implémenter Serializable. Par exemple, pour l'objet simple :
public class MyClass implements Serializable {
private static final long serialVersionUID = -2163051469151804394L;
private int id;
private String created;
}
Dans votre FromFragment :
Bundle args = new Bundle();
args.putSerializable(TAG_MY_CLASS, myClass);
Fragment toFragment = new ToFragment();
toFragment.setArguments(args);
getFragmentManager()
.beginTransaction()
.replace(R.id.body, toFragment, TAG_TO_FRAGMENT)
.addToBackStack(TAG_TO_FRAGMENT).commit();
dans votre ToFragment :
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
Bundle args = getArguments();
MyClass myClass = (MyClass) args
.getSerializable(TAG_MY_CLASS);
@Sameera En général, je mets simplement une chaîne avec ma classe de fragment, c'est-à-dire que si j'ai la classe MyFragmentIMGoingTo.java alors mon TAG_TO_FRAGMENT = "MyFragmentIMGoingTo" ;
Merci pour votre réponse mais devons-nous implémenter quelque chose comme Serializable ou Parcelable ?
Vous êtes sûr ? Parce que j'ai dû mettre en œuvre Serializable/ Parcelable lorsque j'ai transmis des données complexes entre un fragment et une activité en utilisant l'intention .......
J'ai essayé avec des valeurs simples seulement. Aucune idée sur Serializable ou Parcelable, désolé.
Code complet du passage des données en utilisant fragment à fragment
Fragment fragment = new Fragment(); // replace your custom fragment class
Bundle bundle = new Bundle();
FragmentTransaction fragmentTransaction = getSupportFragmentManager().beginTransaction();
bundle.putString("key","value"); // use as per your need
fragment.setArguments(bundle);
fragmentTransaction.addToBackStack(null);
fragmentTransaction.replace(viewID,fragment);
fragmentTransaction.commit();
Dans la classe de fragment personnalisé
Bundle mBundle = new Bundle();
mBundle = getArguments();
mBundle.getString(key); // key must be same which was given in first fragment
Juste pour prolonger les réponses précédentes - cela pourrait aider quelqu'un. Si votre getArguments()
renvoie à null
, le mettre à onCreate()
et non au constructeur de votre fragment :
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
int index = getArguments().getInt("index");
}
Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.
0 votes
J'essaie de répondre à cette question @ aquí . J'espère que ça va marcher.