如何在显示时将数据传递给Dialog Fragment

时间:2017-02-22 10:30:43

标签: java android android-dialogfragment

事实上,当您需要将参数传递给自定义对话框片段时,请在实际使用它们之前将其捆绑。

示例:

class MyDFrag extends DialogFragment{

      //Empty Construct
      public MyDFrag(){}

      public static MyDFrag newInstance(){

          MyDFrag fragment = new MyDFrag();
          args = new Bundle();
          fragment.setArgument(args);

      }

}

这对于大多数路径都很有效,但前提是在实际显示对话框片段之前传递了这些参数。

我的问题是我的对话框中有一个textview,并希望在对话框当前显示时在其父活动中发生某些事情时更改其值。

显示对话框后传递参数不会影响此更改。

在我的onCreate:

public void onViewCreated(View view, Bundle savedInstanceState) {
    super.onViewCreated(view, savedInstanceState);

    textbox = (TextView) view.findViewById(R.id.textish);

    if(args.containsKey("status")){
        textbox.setText(getArguments().getString("status"));
    }

}

在对话框类中,我有一个公共对话框,用于设置textview的值,然后我在主活动中调用该值。

public void setStatus(String value){
    args.putString("status", value);
}

所以,当我准备好参加我的主要活动时,我打电话给

dialog.setStatus("ok");

这只有在我显示对话框之前运行代码时才有效。有没有办法实现这个目标?

建议表示赞赏,谢谢

3 个答案:

答案 0 :(得分:1)

我相信有几种方法可以做到这一点。 基本上,正如我所看到的,您想要的是能够异步地向对话框发送消息,其中某些内容已发生变化且UI需要更新。 我建议使用LocalBroadcastManager:https://developer.android.com/reference/android/support/v4/content/LocalBroadcastManager.html

使用起来非常简单 - 没有太多代码来设置它。你可以找到很多 如何使用它们的例子。 然后,我会在创建或显示对话框时设置接收器。 在您的父活动中,当您需要通知对话框更改时,您将触发包含数据的消息。

答案 1 :(得分:0)

public void setStatus(String value){

    if(textbox!=null){
        textbox.setText(value);
    }else{
        args.putString("status", value);
    }

}

答案 2 :(得分:0)

根据您发布的内容,代码无法检测何时更改了args,因此它无法再次从args读取以设置更改。

但如果你所做的只是再次从他们那里读取,那么首先设置args是没有意义的,相反我建议你直接在你的setStatus方法中设置文本(可以' t让代码格式化由于某种原因正常工作):

public void setStatus(String value){ textbox.setText(value); }

请注意,面向用户的代码永远不应该是硬编码的,而是使用字符串资源。