134 votes

passage de l'argument au DialogFragment

J'ai besoin de passer certaines variables à DialogFragment pour que je puisse effectuer une action. Eclipse me suggère d'utiliser

Fragment#setArguments(Bundle)

Mais je ne sais pas comment utiliser cette fonction. Comment puis-je l'utiliser pour passer des variables à mon dialogue ?

329voto

JafarKhQ Points 3247

Utilisation de newInstance

public static MyDialogFragment newInstance(int num) {
    MyDialogFragment f = new MyDialogFragment();

    // Supply num input as an argument.
    Bundle args = new Bundle();
    args.putInt("num", num);
    f.setArguments(args);

    return f;
}

Et obtenir les Args comme ceci

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    mNum = getArguments().getInt("num");
    ...
}

Voir l'exemple complet ici
http://developer.Android.com/reference/Android/app/DialogFragment.html

32voto

Sam Points 2090

J'ai utilisé pour envoyer des valeurs à partir de mon listview

Comment envoyer

mListview.setOnItemLongClickListener(new AdapterView.OnItemLongClickListener() {
        @Override
        public boolean onItemLongClick(AdapterView<?> parent, View view, int position, long id) {
            Favorite clickedObj = (Favorite) parent.getItemAtPosition(position);

            Bundle args = new Bundle();
            args.putString("tar_name", clickedObj.getNameTarife());
            args.putString("fav_name", clickedObj.getName());

            FragmentManager fragmentManager = getSupportFragmentManager();
            TarifeDetayPopup userPopUp = new TarifeDetayPopup();
            userPopUp.setArguments(args);
            userPopUp.show(fragmentManager, "sam");

            return false;
        }
    });

Comment recevoir dans la méthode onCreate() de DialogFragment

    Bundle mArgs = getArguments();
    String nameTrife = mArgs.getString("tar_name");
    String nameFav = mArgs.getString("fav_name");
    String name = "";

// Téléchargement Kotlin

 val fm = supportFragmentManager
        val dialogFragment = AddProgFargmentDialog() // my custom FargmentDialog
        var args: Bundle? = null
        args?.putString("title", model.title);
        dialogFragment.setArguments(args)
        dialogFragment.show(fm, "Sample Fragment")

// recevoir

 override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        if (getArguments() != null) {
            val mArgs = arguments
            var myDay= mArgs.getString("title")
        }
    }

9voto

Golu Points 7213

Il existe donc deux façons de transmettre des valeurs d'un fragment/activité à un fragment de dialogue :-

  1. Créer un objet fragment de dialogue avec la méthode make setter et passer la valeur/argument.

  2. Transmettre la valeur/argument à travers le faisceau.

Méthode 1 :

// Fragment or Activity 
@Override
public void onClick(View v) {
     DialogFragmentWithSetter dialog = new DialogFragmentWithSetter();
     dialog.setValue(header, body);
     dialog.show(getSupportFragmentManager(), "DialogFragmentWithSetter");         
}

//  your dialog fragment
public class MyDialogFragment extends DialogFragment {
    String header; 
    String body;
    public void setValue(String header, String body) {   
          this.header = header;
          this.body = body;
    }
    // use above variable into your dialog fragment
}

Note : - Ce n'est pas la meilleure façon de procéder.

Méthode 2 :

// Fragment or Activity 
@Override
public void onClick(View v) {
     DialogFragmentWithSetter dialog = new DialogFragmentWithSetter();

     Bundle bundle = new Bundle();
     bundle.putString("header", "Header");
     bundle.putString("body", "Body");  
     dialog.setArguments(bundle);
     dialog.show(getSupportFragmentManager(), "DialogFragmentWithSetter");         
}

//  your dialog fragment
public class MyDialogFragment extends DialogFragment {
    String header; 
    String body;

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        if (getArguments() != null) {
             header = getArguments().getString("header","");
             body = getArguments().getString("body","");
        }
    }
    // use above variable into your dialog fragment
}

Note : - C'est la meilleure façon de procéder.

5voto

thepoosh Points 5941

Comme une manière générale de travailler avec les fragments, comme JafarKhQ l'a noté, vous ne devriez pas passer les paramètres dans le constructeur mais avec une balise Bundle .

la méthode intégrée pour cela dans le Fragment La classe est setArguments(Bundle) y getArguments() .

En gros, ce que vous faites, c'est de créer un paquet avec tous vos Parcelable et les envoyer.
à son tour, votre Fragment obtiendra ces éléments dans sa base de données. onCreate et faire sa magie sur eux.

de la manière indiquée dans le DialogFragment Le lien était une façon de le faire dans un fragment à apparition multiple avec un type spécifique de données et fonctionne bien la plupart du temps, mais vous pouvez aussi le faire manuellement.

2voto

Joe Blow Points 3618

En tout cas, ce que JafarKhQ explique est la solution correcte.

Toutefois, notez que vous pouvez simplement "définir une variable" dans un DialogFragment.

Vous le faites "entre" la création du fragment et sa présentation. Donc, par exemple,

    SomePopup sp = new SomePopup();
    sp.specialTitle = "Happy Title";
    sp.explodingTanks = true;
    sp.show( getFragmentManager(), "tag_somepopup" );

Ceci est utile dans certaines situations. Mais, assurez-vous de pouvoir le faire correctement comme l'explique Jafar !

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