【问题标题】:How can I pass data from activity to the dialogFragment that activity invoked?如何将数据从活动传递到活动调用的 dialogFragment?
【发布时间】:2012-10-11 13:21:55
【问题描述】:

在我的应用程序中,我有一个用户填写的表格。按“保存”,数据将保存到本地数据库。我想为用户添加一个确认对话框,以便在继续之前查看他输入的详细信息,因为这些详细信息至关重要。

在我的 dialogFragment 实例中,我会有类似的内容:“您正在输入这些详细信息:A、B、C...您确认了吗?”

A,B,C 是调用 dialogFragment 的活动中我的 EditText 字段的值

如何从 dialogFragment 访问这些值?我正在使用:

new ConfirmSaveProjectDetails().show(getFragmentManager(),"Confirm");

在我的活动中。 ConfirmSaveProjectDetails 是我的 dialogFragment 类。

我没有使用 Intent,否则我会发送一个 Bundle...

有什么建议吗?

【问题讨论】:

    标签: android android-dialogfragment


    【解决方案1】:

    您可以将包形式的参数添加到片段中,然后从片段中检索它们。使用Fragment 上可用的以下方法:

    setArgumentsgetArguments

    将它们作为参数传递给 Fragments 构造函数也是一种选择。

    【讨论】:

    • setArgument 仍然有效,但现在使用构造函数传递参数会导致此错误(Android SDK 21.1):“此片段应提供默认构造函数(没有参数的公共构造函数)”
    • 当您定义自己的(非默认)构造函数时,您还需要定义一个公共默认构造函数。在某些情况下,将重新创建 Fragment 并调用默认构造函数,之后将使用非空包调用 onCreate 等。您将使用捆绑包来恢复任何实例数据,例如您可能从传递给构造函数的数据中初始化的数据。 IMO 使用 setArguments 更好,因为该捆绑包已序列化,您只需调用 getArguments 即可获取有关片段(重新)创建的数据。
    【解决方案2】:

    也许不是最漂亮/优雅的方法,但您可以制作这些信息public static,然后从对话框中引用它们。

    在您收集数据的活动/片段中:

    public static String A
    public static String B
    public static String C
    

    然后像这样在对话片段中抓住它(如果我在解释你已经知道的事情,请道歉):

    your_activity/fragment_classname.A
    your_activity/fragment_classname.B
    your_activity/fragment_classname.C
    

    【讨论】:

      【解决方案3】:

      在您的活动中

      ImageViewDialogFragment dialogFragment = new ImageViewDialogFragment ();
                              Bundle bundle = new Bundle();
                              bundle.putString("link",moviesList.get(position).getImage());
                              dialogFragment.setArguments(bundle);
                              dialogFragment.show((GalleryReviewActivity.this).getSupportFragmentManager(),"Image Dialog");
      

      在您的 DialogFragment

       Bundle bundle = getArguments();
       String imageLink = bundle.getString("link","");
      

      【讨论】:

        猜你喜欢
        • 2017-08-25
        • 1970-01-01
        • 1970-01-01
        • 2011-02-11
        • 1970-01-01
        • 2019-10-08
        • 1970-01-01
        • 2023-03-21
        • 2017-11-13
        相关资源
        最近更新 更多