214 votes

Comment transférer certaines données vers un autre Fragment ?

Comment transférer certaines données vers d'autres Fragment de même, cela a été fait avec extras pour intents ?

0 votes

J'essaie de répondre à cette question @ aquí . J'espère que ça va marcher.

513voto

Vicki D Points 2966

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

1 votes

Merci pour votre réponse mais devons-nous implémenter quelque chose comme Serializable ou Parcelable ?

0 votes

Non, vous n'avez pas besoin d'implémenter de classes.

2 votes

Vous pourriez ajouter un contrôle pour vérifier que bundle != Null avant de tenter d'en tirer quelque chose ?

46voto

mike.tihonchik Points 1239

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);

0 votes

Vous êtes le meilleur. Merci.

1 votes

@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" ;

0 votes

Il est préférable d'utiliser Parcelable, car Google l'a recommandé comme technique de sérialisation plus optimisée pour le système d'exploitation Android.

16voto

Sakthimuthiah Points 571

GetArguments() retourne null parce que "Its doesn't get anything".

Essayez ce code pour gérer cette situation

if(getArguments()!=null)
{
int myInt = getArguments().getInt(key, defaultValue);
}

0 votes

Merci pour votre réponse mais devons-nous implémenter quelque chose comme Serializable ou Parcelable ?

0 votes

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 .......

0 votes

J'ai essayé avec des valeurs simples seulement. Aucune idée sur Serializable ou Parcelable, désolé.

14voto

Anand Savjani Points 2029

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

6voto

Micer Points 936

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.com

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.

Powered by:

X