我正在我的活动中的列表视图中实现消息提要。在这个活动中,我只显示消息的“主线程”,而不是对它们的回复,某种社交网络行为,当您点击消息时,弹出一个带有该消息的新窗口并回复它。
从网络服务器下载JSONS后,我们将信息放在我们称之为VO的复杂对象中,即UserVO,它存储所有用户的信息。
此对象包含字符串,整数,其他VO列表,消息提要列表等......
我的想法是,当点击一条消息以显示对此消息的可能回复时,在屏幕顶部打开一个新的FragmentDialog,并启用发送回复的可能性。
为此,我需要在两个方向上在Activity和Fragment之间传递这些VO对象,
我一直在阅读有关片段和活动的大量信息,但我仍然无法找到适用于我的解决方案。我需要在初始化Fragment时传递几个对象,这似乎不可能使用newInstance()方法。另外,对于使用这种方法,我需要对我们正在使用的所有VO(复杂)进行序列化。另外,我仍然需要将对象(再次复杂的VO)从片段传递回活动...有没有办法传递那些大对象?一个接口可以用于以两种方式传递信息吗?
我真的很感激任何帮助(一些教程会很棒),因为我找不到任何解决这个问题的方法,而且我非常喜欢这里。
提前致谢!
答案 0 :(得分:3)
在DialogFragmnet类中,您可以创建两个方法:
1- newInstance - >制作DialogFragment的实例
2- setter设置复杂对象
public class YourDialogFragment extends DialogFragment {
ComplexVariable yourVar;
public static YourDialogFragment newInstance(int arg, ComplexVariable var) {
YourDialogFragmentfrag = new MoveSongDialogFragment();
Bundle args = new Bundle();
args.putInt("count", arg);
frag.setArguments(args);
frag.setComplexVariable(var);
return frag;
}
public void setComplexVariable(ComplexVariable var) {
yourVar = var;
}
}
然后,显示对话框
FragmentManager manager = getSupportFragmentManager();
FragmentTransaction ft = manager.beginTransaction();
Fragment prev = manager.findFragmentByTag("yourTag");
if (prev != null) {
ft.remove(prev);
}
// Create and show the dialog.
DialogFragment newFragment = YourFragmentDialog.newInstance(argument, yourComplexObject);
newFragment.show(ft, "yourTag");
答案 1 :(得分:2)
您可以将对象保存为Activity的成员。制作二传手册得到它。 您可以使用getActivity()从Fragment访问Activity,并将Activity转换为YourActivity。
这是在碎片和活动之间传递信息的一般方向。
答案 2 :(得分:1)
Givi所提到的是其中一种方法,但处理这种情况的更好和有效的方法可能是使用工厂模式,比如你将在多个活动中使用Fragment。
查看答案Proper way to give initial data to fragments?
的方式要了解所有方法,请查看http://developer.android.com/guide/components/fragments.html#CommunicatingWithActivity
部分对于复杂对象,如果在Bundle中传递,请检查此Passing data of a non-primitive type between activities in android实现Paracable应该如何操作