将对象传递给Fragments

Mar*_*tyn 40 android fragment android-bundle

我最近一直在使用很多Fragments并且一直在使用两种不同的方法将对象传递给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);
    }
}
Run Code Online (Sandbox Code Playgroud)

和

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;
    }
}
Run Code Online (Sandbox Code Playgroud)

log*_*cat 55

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

他们是:

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

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

  • 1)setRetainInstance将保存实例初始化为原样.当我们去其他地方并且os杀死应用程序时,我们无法恢复数据.因此在特定情况下可能是选项. (3认同)