繁体   English   中英

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

[英]Android: passing data from one fragment To another

我想将对象的数组列表从一个片段传递到另一个片段,我尝试了以下方法,想知道以下内容的优缺点是什么,或者它们的更好方法是什么


第一

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

在上面的代码中,我在fragment类中创建了一个构造函数,并使用它来修改arraylist,但是当我从net读取时,这并不是我寻找其他方法的最佳实践


第二

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

}

在这里,我创建了一个静态方法,用于修改静态数组列表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;

}

在这段代码中,我创建了一个可序列化的数组列表,并将其传递给Bundel,然后

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

从包中检索arraylist


第四

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


因此,从哪种片段中将自定义对象发送到另一片段中,哪种方法是最好的方法,或者哪种更好的方法是它们的优点和缺点?

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

2)您不应该使用静态ArrayList来保存数据,因为如果遇到要实例化两个相同种类的片段的情况,一个片段将覆盖第二个片段的数据

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

4)可Parcelable是一种方法。 使您的类为Parcelable有点痛苦,但它比选择3更快,并且比选择1和2更安全。

另一个想法:

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

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

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

我发现可以轻松地将对象转换为实现Parcelable接口的一种好方法是此Android Studio插件> android-parcelable-intellij-plugin 如果您喜欢> parcelable.com,也有一个网站可以帮助您做到这一点

(据我所知,可拆分对象也比可序列化对象有效,因此请尽可能使用它们)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM