Pasar objetos en Fragmentos

He estado trabajando con un montón de Fragments recientemente y se han utilizando dos métodos distintos de pasar en los objetos a los Fragmentos, pero la única diferencia que yo veo es que en el enfoque adoptado por FragmentOne a continuación, el objeto que se pasa debe implementar la Serializable interfaz (y todo lo relacionado con la).

Hay beneficios para el uso de 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;
    }
}
  • posibles duplicados de forma Correcta de dar los datos iniciales de los fragmentos
  • También, el uso de Parcelable frente a Serlializable, a menos que usted realmente necesita Serializable para algunos no-Android-propósito específico. Parcelable es aparentemente mucho más rápido.
  • Gracias por responder Marca, me siento en la otra respuesta que vinculado a es similar, pero lo suficientemente diferente a lo que estoy preguntando aquí para hacer esta pregunta útil todavía.
  • Quizás luego de editar tu pregunta para hacer que las diferencias más evidentes. Que cada uno quiere para pasar los datos a un recién creado fragmento. En la respuesta que dio a la pregunta que he ligado, me mostró el patrón estándar para la transferencia de datos en el recién creado fragmento. Si usted está esperando algo más, necesita explicar lo que es el «más».
InformationsquelleAutor Martyn | 2012-05-31

2 Kommentare

  1. 55

    Hay 3 maneras de pasar objetos a un fragmento de

    Son:

    1. Pasar el objeto a través de un organismo es la manera más rápida, pero el estado no se restaurará automáticamente.
    2. setArguments con Serializable objetos, es la más lenta (pero bueno para objetos pequeños, creo) y que han automática del estado de la restauración.
    3. Pasar como Parcelable es una manera rápida (prefiero sobre 2º si uno tiene la colección de paso de los elementos), y ha automática del estado de la restauración.

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

    • AFAIK, en 1) usted tiene restauran automáticamente estado si utiliza setRetainInstance(verdadero)
    • en 1) setRetainInstance salvará a instancia de inicializada como es. Cuando vamos a algún lugar y os mata la app, no podemos restaurar los datos. Por lo que puede ser la opción en casos particulares.
    • gracias mucho por la solución perfecta.
  2. 1

    para la Colección, como la Lista :

    Quería compartir mi experiencia.

    que usted necesita para implementar Parcelable

    Solo uso el putParcelableArrayList método.

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

    Y recuperar el uso de…

    localities = savedInstanceState.getParcelableArrayList(KEY_LCLass_LIST);

    Así que, a menos que necesite la costumbre ArrayList por alguna otra razón, usted puede evitar hacer de ese trabajo extra y sólo implementar Parcelable para su Localidad de la clase.

Kommentieren Sie den Artikel

Bitte geben Sie Ihren Kommentar ein!
Bitte geben Sie hier Ihren Namen ein

Pruebas en línea