android - studio - Pasando objetos a Fragmentos
onattach fragment android (2)
Hay 3 formas de pasar objetos a un fragmento
Son:
- Pasar el objeto a través de un setter es la forma más rápida, pero el estado no se restaurará automáticamente.
-
setArguments
con objetosSerializable
es la forma más lenta (pero está bien para objetos pequeños, creo) y tienes restauración de estado automática. - 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.