Android:将数据从一个片段传递到另一个片段

时间:2014-11-17 11:33:26

标签: android serialization android-fragments parcelable parcel

我想将对象的arraylist从一个片段传递到另一个片段我尝试了以下方式,想知道以下的专业人士和对象是什么,或者是他们更好的方法


第一

public myFragment(ArrayList<E> myarray) {
super();        
this.myarray=myarray;
}

在上面的代码中,我在fragment类中创建了一个构造函数,并用它来修改arraylist 但是当我从网上阅读时,这不是我搜索其他人的最佳做法


第二

public static myFragment newInstance(ArrayList<E> myarray1) {
   //        TODO Auto-generated constructor stub
    MyFragment myFragment=new MyFragment();
    myarray=myarray1;

}

这里我创建了一个静态方法来修改静态arraylist myarray


第三

public static myFragment newInstance(ArrayList<E> myarray1) {
   //        TODO Auto-generated constructor stub
    MyFragment myFragment=new MyFragment();
    Bundle bundle=new Bundle();
    bundle.putSerializable(TAG,myarray1);
    myFragment.setArguments(bundle);
    return myFragment;

}

在这段代码中,我创建了一个Serializable arraylist并将其传递给bundel然后

myarray=(ArrayList<E>) bundle.getSerializable(TAG);

从捆绑

中恢复了arraylist

我在网上使用的第四种方法是使用parcelable而不是Serializable但是创建一个parcelable有点困难,如果任何人可以分享简单的方法来创建一个parceable,因为我在arraylist中有数组列表。


那么哪个是最好的方法,或者是他们更好的方法将自定义对象从一个片段发送到另一个片段以及他们的专业人士和他们的

2 个答案:

答案 0 :(得分:3)

1)你不应该覆盖Fragment's构造函数,当系统尝试使用反射重新创建片段时,它会导致意外崩溃。

2)你不应该使用静态ArrayList来保存数据,因为如果你遇到想要实例化两个相同类型的片段的情况,一个会覆盖第二个片段的数据< / p>

3)Serializable是可接受的方式,但与Parcelable相比速度相当慢,因为它使用反射来恢复数据

4)Parcelable是一种方法。制作课程Parcelable会有点痛苦,但它比选项3更快,比选项1和2更安全。

另一个想法:

5)如果您不需要保留数据,您可以构建一个单独的类,它将数据保存在ArrayList中,您可以从应用程序的任何位置访问它

6)如果您需要保留数据,则应将其存储在数据库中,当您从一个Activity转到另一个,或从一个Fragment转到另一个时,您只需通过相关对象的ID并从DB中提取数据。

答案 1 :(得分:0)

我建议使用newInstance()静态方法,因为这是Google建议您创建片段的方式(请参阅http://developer.android.com/guide/components/fragments.html)并确保您没有args构造函数。 (Tomislav Novoselec已经说过其他人的限制)

我发现轻松转换对象以实现Parcelable界面的一种很好的方法就是这个Android工作室插件&gt; android-parcelable-intellij-plugin。如果您愿意,还有一个网站可以帮助您。 parcelable.com

(Parcelable对象也比serializable更有效率我已被告知,所以你可以使用它们)