如何将数据从片段传递到对话框片段
Posted
技术标签:
【中文标题】如何将数据从片段传递到对话框片段【英文标题】:How to pass data from a fragment to a dialogFragment 【发布时间】:2013-07-11 10:49:40 【问题描述】:我知道之前有人问过这个问题,但我不太明白如何实现它。 我有一个片段“myFragment”,我在其中创建了一个“myDialogueFragment”的对象。 当我从 myFragment 调用它时,我想将一些值传递给 myDialogueFragment。 我有一个整数 num,我想将它传递给 myDialogueFragment 并将该数字与来自 myDialogueFragment 的其他一些信息一起存储在本地数据库中。
我可能弄错了,但我看到的所有代码都是关于将数据从 myDialogueFragment 发送回 myFragment,这并不是我真正想要的。
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;
@Override
public void onCreate(Bundle savedInstanceState)
super.onCreate(savedInstanceState);
mNum = getArguments().getInt("num");
...
因此,此代码获取 myFragment onCreate() 方法中的参数。我想在 myFragment() 中发送参数并在 myDialogueFragment 中接收它们。
我怎样才能做到这一点?
【问题讨论】:
你的代码不能完全达到你想要的吗?您的 DialogFragment 中有 mNum,您可以在 DialogFragment 的整个生命周期中使用它, num 在 Fragment 中而不在 DialogFragment 中,我想在 DialogFragment 中传递 num 并从那里检索它 DialogFragment 扩展了 Fragment,你可以在它的 onCreate() 中做同样的事情。 嗯,我还没有这样想过,让我试试,所以你告诉我,我可以使用相同的,但在 onCreateDialog().. 【参考方案1】:您需要在片段上设置参数如下:
Bundle args = new Bundle();
args.putString("key", "value");
DialogFragment newFragment = new YourDialogFragment();
newFragment.setArguments(args);
newFragment.show(getSupportFragmentManager(), "TAG");
您现在要做的就是在片段中捕获这些参数并使用它们...
在对话片段中,您会这样读...
Bundle mArgs = getArguments();
String myValue = mArgs.getString("keyUsed to send it...");
【讨论】:
等等,我需要读取 DialogueFragment 内部的参数,而不是 Fragment 内部的参数?会是同样的程序吗? 你需要在DialogFragment中读取数据,你是在Fragment中传递数据,在DialogFragment中读取... 谢谢你的大写【参考方案2】:我在扩展为 ActivityFragment 的 calss 中调用 FragmentDialog
//TODO 1
Followers clickedObj = (Followers)
parent.getItemAtPosition(position);
Bundle bundle = new Bundle();
bundle.putString("name", clickedObj.getFollow_name());
bundle.putString("nick", clickedObj.getFollow_nickname());
bundle.putString("score", clickedObj.getFollow_score());
bundle.putString("title", clickedObj.getFollow_title());
FragmentManager fragmentManager = getSupportFragmentManager();
UserPopUp userPopUp = new UserPopUp();
//TODO 1
userPopUp.setArguments(bundle);
userPopUp.show(fragmentManager, "followers");
我在课堂上的 onActivityCreated 上调用了它,它扩展到了 DialogFragment
@Override
public void onActivityCreated(Bundle savedInstanceState)
super.onActivityCreated(savedInstanceState);
//Bundle Data Cekme başlangıç
Bundle mArgs = getArguments();
String userName = mArgs.getString("name");
String userNickName = mArgs.getString("nick");
String userTitle = mArgs.getString("title");
String userScore = mArgs.getString("score");
user_name.setText(userName);
nick_name.setText(userNickName);
challenge_title.setText(userTitle);
user_score.setText(userScore);
// bitiş
效果不错
【讨论】:
【参考方案3】:两个 Fragment 永远不应该直接通信。
片段之间通信的推荐方式是创建一个共享的 ViewModel 对象。两个片段都可以通过其包含的 Activity 访问 ViewModel。 Fragments 可以更新 ViewModel 中的数据,如果使用 LiveData 公开数据,只要它正在从 ViewModel 观察 LiveData,新状态就会被推送到另一个 Fragment。
如果您无法使用共享 ViewModel 在 Fragment 之间进行通信,您可以使用接口手动实现通信流。然而,这最终需要更多的工作来实现,并且不容易在其他 Fragment 中重用。
for more information
【讨论】:
【参考方案4】:我扩展了一个 DialogFragment。而已。现在确实你不能在构造函数中传递任何参数(你也可以通过实例化一个 newInstance 静态函数来解决这个问题),但你绝对可以使用 getter/setter 添加成员变量。现在您可以非常轻松地为您的对话框提供所需的一切。
【讨论】:
这并没有提供问题的答案。一旦您有足够的声誉,您就可以对任何帖子发表评论;相反,提供不需要提问者澄清的答案。以上是关于如何将数据从片段传递到对话框片段的主要内容,如果未能解决你的问题,请参考以下文章
自定义对话框片段内的进度条 - 如何从 AsyncTask 传递进度?