在以片段传递对象(Passing objects in to Fragments)

2019-06-25 01:21发布

我一直有很多的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;
    }
}

Answer 1:

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

他们是:

  1. 通过制定者传递的对象是最快的途径,但状态不会自动恢复。
  2. setArgumentsSerializable对象是最慢的方式(但没关系的小物件,我认为),你必须自动状态恢复。
  3. 传球一样Parcelable是一种快速的方式(更喜欢它了:第二个,如果您有元素的集合来传递),并有自动状态恢复。

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



Answer 2:

对于收集如表:

我想分享我的经验。

您需要实现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其他一些原因,你能避免做任何额外的工作,只实现Parcelable您局部性的类。



文章来源: Passing objects in to Fragments