support studio que onattach getbundle example activity android fragment android-bundle

android - studio - Pasando objetos a Fragmentos



onattach fragment android (2)

Hay 3 formas de pasar objetos a un fragmento

Son:

  1. Pasar el objeto a través de un setter es la forma más rápida, pero el estado no se restaurará automáticamente.
  2. setArguments con objetos Serializable es la forma más lenta (pero está bien para objetos pequeños, creo) y tienes restauración de estado automática.
  3. Pasar como Parcelable es una forma rápida (lo prefiere más que el segundo si tiene una colección de elementos para pasar) y tiene una restauración de estado automática.

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

He estado trabajando con muchos Fragments recientemente y he usado dos métodos distintos para pasar objetos a los Fragmentos, pero la única diferencia que puedo ver es que en el enfoque que sigue FragmentOne, el objeto que pasa debe implementar la interfaz Serializable ( y todo lo relacionado con eso ).

¿Hay algún beneficio al usar uno sobre el otro?

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); } }

y

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; } }


para Colección como Lista:

Yo quería compartir mi experiencia

necesitas implementar Parcelable

Simplemente use el método putParcelableArrayList.

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

Y recuperarlo usando ...

localities = savedInstanceState.getParcelableArrayList(KEY_LCLass_LIST);

Por lo tanto, a menos que necesite el ArrayList personalizado por alguna otra razón, puede evitar hacer ese trabajo adicional y solo implementar Parcelable para su clase Locality.