我需要将一些变量传递给DialogFragment
,这样我才能执行操作。Eclipse建议我应该使用
Fragment#setArguments(Bundle)
但是我不知道如何使用这个函数。如何使用它将变量传递给我的对话框?
发布于 2013-03-17 17:26:35
使用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
发布于 2013-03-17 17:45:40
正如JafarKhQ所指出的,作为处理片段的一般方法,您不应该在构造函数中传递参数,而应该使用Bundle
。
Fragment
类中的内置方法是setArguments(Bundle)
和getArguments()
。
基本上,您要做的就是设置一个包含所有Parcelable
项目的捆绑包,然后将它们发送出去。
反过来,您的片段将在它的onCreate
中获取这些项,并对它们进行魔法处理。
DialogFragment
链接中显示的方法是在具有一种特定数据类型的多外观片段中执行此操作的一种方法,并且在大多数情况下工作得很好,但您也可以手动执行此操作。
发布于 2015-10-09 01:04:38
在我的例子中,上面的代码在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");
[...]
}
https://stackoverflow.com/questions/15459209
复制相似问题