事实上,当您需要将参数传递给自定义对话框 fragment 时,您会在实际使用它们之前将其打包。
示例:
class MyDFrag extends DialogFragment{
//Empty Construct
public MyDFrag(){}
public static MyDFrag newInstance(){
MyDFrag fragment = new MyDFrag();
args = new Bundle();
fragment.setArgument(args);
}
}
这对大多数路径都非常有效,但前提是您在实际显示对话框 fragment 之前传递此参数。
我的问题是我的对话框中有一个 TextView ,当对话框当前显示时其父 Activity 发生某些事情时我想更改它的值。
在显示对话框后传递参数不会影响此更改。
在我的 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"));
}
}
在对话框类中,我有一个公共(public)对话框,它设置了 TextView 的值,然后我在某个时候在我的主要 Activity 中调用它。
public void setStatus(String value){
args.putString("status", value);
}
所以当我准备好我的主要 Activity 时,我调用
dialog.setStatus("ok");
只有当我在显示对话框之前而不是在显示对话框时运行代码时才有效。有办法实现吗?
感谢建议,谢谢
最佳答案
我相信有几种方法可以做到这一点。 基本上,正如我所见,您想要的是能够向对话框异步发送消息,告知某些内容已更改并且 UI 需要更新。 我建议考虑使用 LocalBroadcastManager :https://developer.android.com/reference/android/support/v4/content/LocalBroadcastManager.html
它的使用非常简单 - 设置它的代码不多。你可以找到很多 如何使用它们的示例。 然后我会在创建或显示对话框时在对话框中设置一个接收器。 在您的父 Activity 中,当您需要将更改通知对话框时,您将触发一条包含数据的消息。
关于java - 如何在显示时将数据传递给 Dialog Fragment,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42388683/