40

私はFragments最近多くの作業を行っており、フラグメントにオブジェクトを渡す 2 つの異なる方法を使用していますが、唯一の違いは、以下の 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;
    }
}
4

2 に答える 2

55

オブジェクトをフラグメントに渡すには3つの方法があります

彼らです:

  1. オブジェクトをセッターに渡すのが最速の方法ですが、状態は自動的に復元されません。
  2. setArgumentsオブジェクトを使用Serializableするのが最も遅い方法であり(ただし、小さなオブジェクトの場合は問題ないと思います)、自動状態復元があります。
  3. そのまま渡すParcelableのが速い方法であり(渡す要素のコレクションがある場合は2番目の方法よりも優先されます)、自動状態復元があります。

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

于 2012-05-31T15:40:06.203 に答える
2

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 を実装することができます。

于 2015-08-08T09:18:18.180 に答える