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 ?

2voto

DINA TAKLIT Points 563

Juste que je veux montrer comment faire ce que dit @JafarKhQ en Kotlin pour ceux qui utilisent kotlin qui pourrait les aider et faire gagner du temps au thème aussi :

vous devez donc créer un objet compagnon pour créer de nouveaux newInstance fonction

vous pouvez définir le paramètre de la fonction comme vous le souhaitez. en utilisant

 val args = Bundle()

vous pouvez définir vos args.

Vous pouvez maintenant utiliser args.putSomthing pour ajouter vos args que vous donnez comme paramètre dans votre fonction newInstance. putString(key:String,str:String) pour ajouter une chaîne par exemple et ainsi de suite

Maintenant, pour obtenir l'argument, vous pouvez utiliser arguments.getSomthing(Key:String) => comme arguments.getString("1")

Voici un exemple complet

class IntervModifFragment : DialogFragment(), ModContract.View
{
    companion object {
        fun newInstance(  plom:String,type:String,position: Int):IntervModifFragment {
            val fragment =IntervModifFragment()
            val args = Bundle()
            args.putString( "1",plom)
            args.putString("2",type)
            args.putInt("3",position)
            fragment.arguments = args
            return fragment
        }
    }

...
    override fun onViewCreated(view: View?, savedInstanceState: Bundle?) {
        super.onViewCreated(view, savedInstanceState)
        fillSpinerPlom(view,arguments.getString("1"))
         fillSpinerType(view, arguments.getString("2"))
        confirmer_virme.setOnClickListener({on_confirmClick( arguments.getInt("3"))})

        val dateSetListener = object : DatePickerDialog.OnDateSetListener {
            override fun onDateSet(view: DatePicker, year: Int, monthOfYear: Int,
                                   dayOfMonth: Int) {
                val datep= DateT(year,monthOfYear,dayOfMonth)
                updateDateInView(datep.date)
            }
        }

    }
  ...
}

Maintenant comment créer votre dialogue vous pouvez faire quelque chose comme ceci dans une autre classe

  val dialog = IntervModifFragment.newInstance(ListInter.list[position].plom,ListInter.list[position].type,position)

comme ceci par exemple

class InterListAdapter(private val context: Context, linkedList: LinkedList<InterItem> ) : RecyclerView.Adapter<InterListAdapter.ViewHolder>()
{
   ... 
    override fun onBindViewHolder(holder: ViewHolder, position: Int) {

        ...
        holder.btn_update!!.setOnClickListener {
           val dialog = IntervModifFragment.newInstance(ListInter.list[position].plom,ListInter.list[position].type,position)
           val ft = (context as AppCompatActivity).supportFragmentManager.beginTransaction()
            dialog.show(ft, ContentValues.TAG)
        }
        ...
    }
..

}

0voto

Kirill Points 1

Dans mon cas, aucun du code ci-dessus avec bundle-operate fonctionne ; Voici ma décision (je ne sais pas si c'est un code correct ou non, mais il fonctionne dans mon cas) :

public class DialogMessageType extends DialogFragment {
    private static String bodyText;

    public static DialogMessageType addSomeString(String temp){
        DialogMessageType f = new DialogMessageType();
        bodyText = temp;
        return f;
    };

    @Override
    public Dialog onCreateDialog(Bundle savedInstanceState) {
        final String[] choiseArray = {"sms", "email"};
        String title = "Send text via:";
        final AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());
        builder.setTitle(title).setItems(choiseArray, itemClickListener);
        builder.setCancelable(true);
        return builder.create();
    }

    DialogInterface.OnClickListener itemClickListener = new DialogInterface.OnClickListener() {
        @Override
        public void onClick(DialogInterface dialog, int which) {
            switch (which){
                case 0:
                    prepareToSendCoordsViaSMS(bodyText);
                    dialog.dismiss();
                    break;
                case 1:
                    prepareToSendCoordsViaEmail(bodyText);
                    dialog.dismiss();
                    break;
                default:
                    break;
            }
        }
    };
[...]
}

public class SendObjectActivity extends FragmentActivity {
[...]

DialogMessageType dialogMessageType = DialogMessageType.addSomeString(stringToSend);
dialogMessageType.show(getSupportFragmentManager(),"dialogMessageType");

[...]
}

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