Comment utiliser les méthodes setArguments () et getArguments () dans Fragments?

98

J'ai 2 fragments: (1) Frag1 (2) Frag2.

Frag1

bundl = new Bundle();
bundl.putStringArrayList("elist", eList);

Frag2 dv = new Frag2();
dv.setArguments(bundl);
FragmentTransaction ft = getFragmentManager().beginTransaction();
ft.replace(R.id.the_fragg,dv);
ft.show(getFragmentManager().findFragmentById(R.id.the_fragg)); 
ft.addToBackStack(null);
ft.commit();

Comment obtenir ces données dans Frag2?

Android_programmer_camera
la source

Réponses:

26

Vous avez une méthode appelée getArguments()qui appartient à la Fragmentclasse.

codeScriber
la source
192

Il suffit d' appeler getArguments()dans votre Frag2de » onCreateView()méthode:

public class Frag2 extends Fragment {

     public View onCreateView(LayoutInflater inflater,
         ViewGroup containerObject,
         Bundle savedInstanceState){
         //here is your arguments
         Bundle bundle=getArguments(); 

        //here is your list array 
        String[] myStrings=bundle.getStringArray("elist");   
     }
}
Ashakirov
la source
12
Il retourne null dans mon cas, une idée de pourquoi cela se produit?
Anirudh
2
Vous mettez ArrayList dans le bundle, mais vous obtenez un String Array. Vous devriez fairebundle.getStringArrayList("elist");
Rafał
1
Vous avez oublié la déclaration de retour:return super.onCreateView(inflater, container, savedInstanceState);
user41805
4
Oncreateview appelle tout le temps. Appelez simplement getarguments dans la méthode oncreate (). Il n'appellera que lorsque le fragment est détruit ou nouvellement créé.
Mohamed Ibrahim
5
@almaz_from_kazan @HabeebPerwad Pourquoi utilisez-vous getArguments() in onCreateView, pas in onCreate?
Nik Kober
38

Exemple: Ajouter des données: -

   Bundle bundle = new Bundle();
   bundle.putString("latitude", latitude);
   bundle.putString("longitude", longitude);
   bundle.putString("board_id", board_id);
   MapFragment mapFragment = new MapFragment();
   mapFragment.setArguments(bundle);

Par exemple: obtenir des données: -

String latitude =  getArguments().getString("latitude")
Arshid KV
la source
7

dans Frag1:

Bundle b = new Bundle();

b.putStringArray("arrayname that use to retrive in frag2",StringArrayObject);

Frag2.setArguments(b);

dans Frag2:

Bundle b = getArguments();

String[] stringArray = b.getStringArray("arrayname that passed in frag1");

C'est si simple.

Siva Krishna
la source
5

Instancier le fragment de la bonne manière!

getArguments() setArguments()Les méthodes semblent très utiles lorsqu'il s'agit d'instancier un Fragment à l'aide d'une méthode statique.
c'est à direMyfragment.createInstance(String msg)

Comment faire?

Code de fragment

public MyFragment extends Fragment {

    private String displayMsg;
    private TextView text;

    public static MyFragment createInstance(String displayMsg)
    {
        MyFragment fragment = new MyFragment();
        Bundle args = new Bundle();
        args.setString("KEY",displayMsg);
        fragment.setArguments(args);           //set
        return fragment;
    }

    @Override
    public void onCreate(Bundle bundle)
    {
        displayMsg = getArguments().getString("KEY"):    // get 
    }

    @Override
    public View onCreateView(LayoutInlater inflater, ViewGroup parent, Bundle bundle){
        View view = inflater.inflate(R.id.placeholder,parent,false);
        text = (TextView)view.findViewById(R.id.myTextView);
        text.setText(displayMsg)    // show msg
        returm view;
   }

}

Supposons que vous souhaitiez transmettre une chaîne lors de la création d'une instance. Voici comment vous allez le faire.

MyFragment.createInstance("This String will be shown in textView");

Lire la suite

1) Pourquoi Myfragment.getInstance (String msg) est-il préférable au nouveau MyFragment (String msg)?
2) Exemple de code sur les fragments

Rohit Singh
la source
android.os.Bundle n'a pas setString. Voulez-vous dire putString ()?
Stealth Rabbi
2

pour ceux comme moi qui cherchent à envoyer des objets autres que des primitives, puisque vous ne pouvez pas créer de constructeur paramétré dans votre fragment, ajoutez simplement un accesseur setter dans votre fragment, cela fonctionne toujours pour moi.

Mina Gabriel
la source
C'est une mauvaise manière. Si un fragment se recrée, il perdra ces paramètres. Les paramètres envoyés au fragment doivent être sérialisables, transmis setArguments(). Les paramètres non sérialisables peuvent être définis avec setter, mais il doit à nouveau être appelé lors de l'activité / fragment receate.
CoolMind