事实上,当您需要将参数传递给自定义对话框片段时,请在实际使用它们之前将其捆绑。
示例:
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");
这只有在我显示对话框之前运行代码时才有效。有没有办法实现这个目标?
建议表示赞赏,谢谢
答案 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);
}
请注意,面向用户的代码永远不应该是硬编码的,而是使用字符串资源。