首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >将参数传递给DialogFragment

将参数传递给DialogFragment
EN

Stack Overflow用户
提问于 2013-03-17 17:20:16
回答 3查看 123.3K关注 0票数 124

我需要将一些变量传递给DialogFragment,这样我才能执行操作。Eclipse建议我应该使用

代码语言:javascript
复制
Fragment#setArguments(Bundle)

但是我不知道如何使用这个函数。如何使用它将变量传递给我的对话框?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2013-03-17 17:26:35

使用newInstance

代码语言:javascript
复制
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;
}

并像这样得到参数

代码语言:javascript
复制
@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    mNum = getArguments().getInt("num");
    ...
}

请参阅此处的完整示例

http://developer.android.com/reference/android/app/DialogFragment.html

票数 320
EN

Stack Overflow用户

发布于 2013-03-17 17:45:40

正如JafarKhQ所指出的,作为处理片段的一般方法,您不应该在构造函数中传递参数,而应该使用Bundle

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

基本上,您要做的就是设置一个包含所有Parcelable项目的捆绑包,然后将它们发送出去。

反过来,您的片段将在它的onCreate中获取这些项,并对它们进行魔法处理。

DialogFragment链接中显示的方法是在具有一种特定数据类型的多外观片段中执行此操作的一种方法,并且在大多数情况下工作得很好,但您也可以手动执行此操作。

票数 5
EN

Stack Overflow用户

发布于 2015-10-09 01:04:38

在我的例子中,上面的代码在bundle-operate上都不能工作;这是我的决定(我不知道它是否是正确的代码,但它在我的例子中是有效的):

代码语言:javascript
复制
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");

[...]
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/15459209

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档