将parameter passing给DialogFragment

我需要传递一些variables到DialogFragment ,所以我可以执行一个动作。 Eclipsebuild议我应该使用

 Fragment#setArguments(Bundle) 

但是我不知道如何使用这个function。 我怎样才能使用它来传递variables到我的对话框?

使用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; } 

得到这样的阿格斯

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

在这里看到完整的例子
http://developer.android.com/reference/android/app/DialogFragment.html

作为JafarKhQ指出的与碎片一起工作的一般方式,您不应该在构造函数中传递参数,而应该使用Bundle

Fragment类中的内置方法是setArguments(Bundle)getArguments()

基本上,你所做的就是和你所有的Parcelable物品捆绑在一起,并发送给他们。
反过来,你的Fragment会得到那些正在onCreate物品,并对它们施加魔法。

DialogFragment链接中显示的方式是在具有一个特定types的数据的多个出现的片段中这样做的一种方式,并且在大多数情况下工作正常,但是您也可以手动执行此操作。

我曾经从我的列表视图发送一些值

如何发送

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

以及如何接收 DialogFragment的onCreate()方法

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

在我的情况下,以上没有任何bundle-operate的代码工作; 这是我的决定(我不知道它是否是正确的代码,但它适用于我的情况):

 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"); [...] }