将对象传递给碎片

最近我一直在处理大量Fragments ,并且一直使用两种不同的方法将对象传递给碎片,但是我可以看到的唯一区别是,在下面的FragmentOne所采用的方法中,您传入的对象必须实现Serializable接口( 以及与之相关的所有东西 )。

使用另一个有什么好处?

 public class FragmentOne extends Fragment { public static final String FRAGMENT_BUNDLE_KEY = "com.example.FragmentOne.FRAGMENT_BUNDLE_KEY"; public static FragmentOne newInstance(SomeObject someObject) { FragmentOne f = new FragmentOne(); Bundle args = new Bundle(); args.putSerializable(FRAGMENT_BUNDLE_KEY, someObject); f.setArguments(args); return f; } public SomeObject getSomeObject() { return (SomeObject) getArguments().getSerializable(FRAGMENT_BUNDLE_KEY); } } 

 public class FragmentTwo extends Fragment { SomeObject mSomeObject; public static FragmentTwo newInstance(SomeObject someObject) { FragmentTwo fragment = new FragmentTwo(); fragment.setSomeObject(someObject); return fragment; } public void setSomeObject(SomeObject someObject) { mSomeObject = someObject; } } 

有3种方法将对象传递给一个片段

他们是:

  1. 通过setter传递对象是最快的方法,但状态不会自动恢复。
  2. 使用Serializable对象的setArguments是最慢的方法(但是对于小对象,我认为是可以的),并且你有自动状态恢复。
  3. 作为Parcelable传递是一种快速的方式(如果你有要传递的元素的集合,则Parcelableselect第二个),并且你有自动状态恢复。

http://developer.android.com/reference/android/os/Parcelable.html

用于collections如列表:

我想分享我的经验。

你需要实现Parcelable

只需使用putParcelableArrayList方法即可。

 ArrayList<LClass> localities = new ArrayList<LClass>; ... Bundle bundle = new Bundle(); bundle.putParcelableArrayList(KEY_LClass_LIST, localities); fragmentInstance.setArguments(bundle); return fragmentInstance; 

并检索它使用…

 localities = savedInstanceState.getParcelableArrayList(KEY_LCLass_LIST); 

所以,除非你需要自定义的ArrayList出于其他原因,你可以避免做任何额外的工作,只为你的Locality类实现Parcelable。