我最近一直在处理很多Fragments
并且一直在使用两种不同的方法将对象传递给Fragments,但我能看到的唯一区别是,在下面的FragmentOne采用的方法中,传入的对象必须实现Serializable
接口(and everything associated with that)。
使用其中一个是否有任何好处?
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;
}
}
答案 0 :(得分:55)
将对象传递给片段有三种方法
他们是:
setArguments
个对象的Serializable
是最慢的方式(但我觉得小对象没问题)并且你有自动状态恢复。Parcelable
传递是一种快速的方式(如果你有要传递的元素集合,则更喜欢它超过第二个),并且你有自动状态恢复。http://developer.android.com/reference/android/os/Parcelable.html
答案 1 :(得分:1)
用于集合,例如List:
我想分享一下我的经历。
你需要实现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。