2

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

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

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

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

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

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

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

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

提前致谢!

4

3 回答 3

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");
于 2014-05-02T19:45:00.657 回答
2

您可以将对象保存为 Activity 的成员。为它制作 setter 和 getter。您可以使用 getActivity() 从 Fragment 访问 Activity 并将 Activity 转换为 YourActivity。

这是在片段和活动之间传递信息的一般方向。

于 2012-09-25T16:58:08.443 回答
1

Givi 提到的是其中一种方法,但更好和更有效的处理方法可能是使用工厂模式,比如在您将在多个活动中使用 Fragment 的场景中。

检查如何以正确的方式将初始数据提供给片段?

要了解所有方法,请查看http://developer.android.com/guide/components/fragments.html#CommunicatingWithActivity部分

  1. 创建活动的事件回调
  2. 吸气剂或二传手
  3. 工厂方法

对于复杂对象,如果在 Bundle 中传递,请检查在实现 Paracable的 android 活动之间传递非原始类型的数据应该可以解决问题

于 2013-01-29T21:40:45.170 回答