Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/193.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 将自定义类传递给片段_Android_Fragment_Bundle - Fatal编程技术网

Android 将自定义类传递给片段

Android 将自定义类传递给片段,android,fragment,bundle,Android,Fragment,Bundle,我有一个名为Data的自定义类,它包含所有数据。主活动创建两个片段。我在主要活动中有一个字段,如下所示: private Data data = new Data(); 使用以下方法创建片段: private ArrayList<Fragment> getFragments() { ArrayList<Fragment> fragments = new ArrayList<Fragment>(); fragments.add(new frag

我有一个名为Data的自定义类,它包含所有数据。主活动创建两个片段。我在主要活动中有一个字段,如下所示:

private Data data = new Data();
使用以下方法创建片段:

private ArrayList<Fragment> getFragments() {
    ArrayList<Fragment> fragments = new ArrayList<Fragment>();
    fragments.add(new fragment_one());
    fragments.add(new fragment_two());
    return fragments;
}
private ArrayList getFragments(){
ArrayList片段=新的ArrayList();
添加(新片段_one());
添加(新片段_two());
返回碎片;
}
我需要将数据字段传递给片段,以便片段可以访问数据的方法


我试图创建一个bundle,但无法传递自定义类。我能做什么?

数据需要实现可打包或可序列化


然后,您可以使用bundle.putParcelable()或bundle.putSerializable()通过setArguments()方法将数据传递给两个片段。

您不应该传递对片段的引用,所有数据都应该使用
setArguments传递(除非保留了片段)。原因是android可能会在配置更改期间销毁您的片段,并在活动创建期间重新创建它

所以,您应该要么在setArguments中传递数据,要么使用单例类(即应用程序类)访问数据


[编辑]-我自己还没有尝试过这一点,但您可以找到使数据类可打包的在线工具,这里有一个:

捆绑包可以接受自定义类,如果它们实现了
可打包
可序列化
Parcelable
更快,但需要执行更多的工作;
Serializable
更容易实现,但速度较慢

然后你可以这样做:

Bundle bundle = new Bundle();
bundle.putSerializable("MyData", data);
fragment_one.setArguments(bundle);
现在,
fragment\u one
将在其
onCreate(Bundle bundleHoldingData)
方法中访问
数据


另一个选择是在片段中有一个公共setter来接收数据。这样做的好处是,您不必等到数据准备好添加片段。

您可以根据保存的数据量设置静态对象,并小心内存泄漏。这样你就可以在碎片中找到它。但是,使数据可以打包并与包一起传递始终是一个更好的选择。

一个选项是为活动类上的数据提供访问器。然后,在片段中,调用getActivity(),将其转换为派生类型,并根据需要获取数据


这当然会创建一个从片段到活动的依赖关系,但是如果它不是一个通用的、可重用的片段,它的实现将非常简单和直接,这意味着您可以获得对当前活动数据的引用,而不是像Bundle/Parcelable/Serializable策略那样的副本。

数据类实现了Parcelable吗?它没有。我会调查的。还有别的办法吗?。这有帮助吗