将复杂对象从“活动”传递到“片段”对话框,反之亦然

时间:2012-09-25 16:28:56

标签: android android-fragments android-activity

我正在我的活动中的列表视图中实现消息提要。在这个活动中,我只显示消息的“主线程”,而不是对它们的回复,某种社交网络行为,当您点击消息时,弹出一个带有该消息的新窗口并回复它。

从网络服务器下载JSONS后,我们将信息放在我们称之为VO的复杂对象中,即UserVO,它存储所有用户的信息。

此对象包含字符串,整数,其他VO列表,消息提要列表等......

我的想法是,当点击一条消息以显示对此消息的可能回复时,在屏幕顶部打开一个新的FragmentDialog,并启用发送回复的可能性。

为此,我需要在两个方向上在Activity和Fragment之间传递这些VO对象,

  • 从Activity到DialogFragment:带有消息的对象。
  • 从片段到活动:一旦用户写入文本,并附上图片(URL),我应该将一个对象发送回活动

我一直在阅读有关片段和活动的大量信息,但我仍然无法找到适用于我的解决方案。我需要在初始化Fragment时传递几个对象,这似乎不可能使用newInstance()方法。另外,对于使用这种方法,我需要对我们正在使用的所有VO(复杂)进行序列化。另外,我仍然需要将对象(再次复杂的VO)从片段传递回活动...有没有办法传递那些大对象?一个接口可以用于以两种方式传递信息吗?

我真的很感激任何帮助(一些教程会很棒),因为我找不到任何解决这个问题的方法,而且我非常喜欢这里。

提前致谢!

3 个答案:

答案 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

部分
  1. 为活动创建事件回调
  2. Getters或Setters
  3. 工厂方法
  4. 对于复杂对象,如果在Bundle中传递,请检查此Passing data of a non-primitive type between activities in android实现Paracable应该如何操作