Datos de paso de Android entre Fragmentos

Tengo una Activity y 5 Fragment . En el primer usuario de Fragment ingresa el número de teléfono. En el último (quinto) Fragment necesito mostrar este número de teléfono, ingresar otros campos y enviar todos los datos al servidor. Para cada Fragment estoy usando presentador independiente (MVP).

¿Cómo pasar los datos del primer fragmento a la última?

1) No quiero pasar por toda la cadena de fragmentos, porque no necesitan estos datos.

2) Si almacenar estos datos en la Activity alojamiento de lo que necesito para llamar ((SomeActivity)getActivity()).getUserData() dentro de la clase Fragment y pasar estos datos a Presenter.

3) Elegí la última aproximación. He creado singleton UserData clase. Esto es simple POJO clase. Estoy creando la instancia de UserData en el primer Fragment conjunto de datos necesarios y que usarlo en el último Fragment para recuperar los datos y agregar los campos que faltan.

Pero no sé es el enfoque con singleton solución correcta. Porque necesito despejar la instancia singleton cuando el usuario va a otra Activity . Si hay mejor solución?

EDITAR

Pensé en EventBus. Pero tendré que pasar los datos del Fragmento al Presentador. Ahora llamo UserData.getInstance() dentro de presentar y recuperar datos. Quiero que el código sea más elegante y también correcto. Estoy pidiendo escuchar la opinión de los desarrolladores más experimentados que mejor usar.

Lo haría de la manera ModellViewPresenter

 class CustomerModel { String phoneNumber } interface ICustomerOwner { CustomerModel getCustomer() } class CustomerRegistrationWorkflowActivity extends Activity implements ICustomerOwner { CustomerModel getCustomer() ... } class CustomerContactDataFragment // fragment1 where you edit the phone number. class CustomerRegistrationSummaryFragment // fragment5 showing all data plus submit button) 

Dado que el modelo vive en la actividad (CustomerRegistrationWorkflow) los fragmentos podrían comunicarse con el modelo llamando

 ((ICustomerOwner) getActivity()).getCustomer() 

Hay tantas maneras de enviar datos de una clase (Fragmentos también) a otro.

Considerando los problemas del ciclo de vida de Fragment. Puede utilizar un bus de eventos para el mismo sin ningún tipo de molestias.

 class FragmentA { Bus bus; onCreate(){ bus = new Bus(); } @Subscribe public void receiveMessage(String message) { // TODO: Parse your message } onResume(){ bus.register(this); } onPause(){ bus.unregister(this); } } class FragmentB { onCreate(){ bus.post("You have a message"); } } 

Más sobre la integración de otto aquí . O hay tantas otras opciones también. https://greenrobot.github.io/EventBus/

Uno llama la solución elegante usar el autobús del acontecimiento, el otro – viejo callbacks buenos. Mi punto de vista es evitar la situación de "cadena de fragmentos" – cuando un fragmento llama directamente a otro. Si la actividad maneja completamente el reemplazo de los fragmentos tiene acceso igual a todos los 5 fragmentos. Por lo tanto, puede pasar fácilmente los datos entre ellos utilizando devoluciones de llamada.

No vea ningún problema con MVP en ese caso. El presentador utiliza la devolución de llamada para enviar datos a su vista (Fragmento). Fragmento utiliza la devolución de llamada para enviar datos a su actividad. A continuación, la actividad encuentra el 5º fragmento en el gestor de fragmentos y los datos de actualización / paso en el 5º fragmento.

La situación con devolución de llamada parece más robusta que el bus de eventos, pero sigue siendo materia de gusto.

Un fragmento siempre está conectado a la Actividad que lo contiene. Por lo tanto, puede comunicarse con la actividad fácilmente. Usando su Actividad como un canal de comunicación o un medio de comunicación, puede crear un enlace de comunicación entre los Fragmentos adjuntos a la misma Actividad.

Un fragmento conectado a una Actividad puede acceder al método de la instancia de la Actividad por getActivity () y con esta instancia, el fragmento puede realizar tareas como los métodos de llamada de la Actividad.

Ahora, para transferir datos de un fragmento a otro, puede crear un método en la actividad y almacenar algunos datos en una variable a través de ese método. Y en el otro fragmento, puede acceder al valor de esa variable por ayuda de otro método. El concepto de métodos getter y setter puede ser usado aquí.

Para más información sobre la comunicación de Activity and Fragment, visite el enlace: http://developer.android.com/guide/components/fragments.html#CommunicatingWithActivity

He tenido un montón de problemas acerca de pasar los datos a la acitvidad o fragmento mutuamente. Como resultado, hice DataCache pasar cualquier objeto en cualquier lugar.

Este es el ejemplo super fácil. Gihub: Android DataCache

Fragmento para el remitente

 public class FragmentA { @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); String msg = "the phone number" DataCache.getInstance().push(msg); } } 

Fragmento para el receptor

 public class FragmentB { @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); String msg = DataCache.getInstance().pop(String.class); } } 

Intentarlo: DI espero que usted ayude.

 Class ActivityClass { String phone_number; public void savePhoneNumber(String phone){ phone_number = phone; } public String getPhoneNumber(){ return phone; } } Class FragmentA { String phone; public setPhoneNumber(){ if(getActivity() instanceOf ActivityClass){ ((ActivityClass) getActivity).savePhoneNumber(phone); } } } Class FragmentB { String phone; public getPhoneNumber(){ if(getActivity() instanceOf ActivityClass){ phone = ((ActivityClass) getActivity).getPhoneNumber(); } } } 
  • MVP de Android: cómo comunicarse entre el presentador de la actividad y el presentador de fragmentos
  • Implementación de GoogleApiClient en Android mvp con daga?
  • Implementación de MVP con Dagger en un FragmentPagerAdapter
  • Implementación de MVP en la aplicación de Android
  • Caché de datos del adaptador MVP
  • RxJava y MVP en la aplicación para Android
  • Problemas al definir el patrón MVP para las aplicaciones de Android
  • Transiciones de elementos compartidos entre vistas (no actividades o fragmentos)
  • MVP Android - ¿Dónde guardar el estado de vista?
  • El papel de los adaptadores en Mvp patrón?
  • En el patrón MVP, ¿deben los adaptadores sujetar modelos o el presentador debe mantener los modelos y hacer que el adaptador lo haga referencia?
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.