2012-07-03 9 views
9

Estoy trabajando en la migración de una aplicación de Windows Mobile a Android y me he encontrado con un pequeño problema. La aplicación existente utiliza el patrón MVP y tiene distintas clases de "presentador", que se reutilizarán en el puerto (es una aplicación bastante extensa y no es posible volver a escribirla, y el código C# se está reutilizando con el uso de mono para Android) Estos toman una vista implementando una interfaz, que en Android he logrado mediante la creación de actividades que implementan la interfaz apropiada, creando una instancia de un presentador y pasándose a sí mismos como un argumento. Todo parece funcionar bien para nuestros propósitos, o hasta que salió un sándwich de helado e intenté implementarlo usando fragmentos.Adaptación del modelo de Model View Presenter a Android con Fragment Tabs

Muchas de las actividades utilizan pestañas, y para usar la barra de acciones y algunas de las otras características nuevas, intento convertir las actividades con pestañas a fragmentos con pestañas con un visor, y aquí es donde estoy golpeando algunos problemas. De lo que he leído, la implementación de cada pestaña como un fragmento parece ser el método preferido, pero no estoy seguro de cómo puedo permitir que el presentador se comunique con el fragmento a través de la actividad. En este momento, el presentador llama a los métodos de interfaz de la actividad que luego acceden directamente a los rotadores, textviews, etc. para obtener y establecer valores según sea necesario. Como cada uno de estos elementos de ui se declara en la actividad, esto es trivial. Si muevo todos estos elementos de la interfaz de usuario a fragmentos, sin embargo, parece que no puedo acceder a ellos sin implementar un conjunto completo de interfaces entre cada actividad y fragmento. He intentado generar una referencia en la actividad a los elementos de la interfaz de usuario en los fragmentos (obteniendo la vista de raíz del fragmento y luego encontrando la vista que quiero dentro), sin embargo, el viewpager no siempre carga los fragmentos para que esto no funcione, e incluso cuando los haya cargado, el diseño no se inflará hasta que la actividad esté en estado de ejecución, por lo que siempre obtengo valores nulos.

Sé que es una pregunta un tanto extraña, pero ¿cómo puedo permitir que mis clases de presentador interactúen con los elementos de la interfaz de usuario ahora almacenados en pestañas de fragmentos separadas? Siento que debo hacerlo por completo, pero no veo cómo se debe hacer, así que si alguien pudiera ofrecerme algún consejo sobre cómo podría hacerlo, sería genial.

+0

Teniendo el mismo dilema, usar MVP con elementos personalizados en RecyclerView y ViewPager es dolor en el @ss para trabajar con –

Respuesta

1

¿Qué tal crear un solo presentador para todos los Fragmentos en su FragmentAcivity y luego dejar que este único presentador implemente una interfaz para cada Fragmento (también conocido como Tab). A continuación, crea una instancia de este presentador desde tu instancia de FragmentActivity desde la cual el presentador tendrá una referencia a todos los Fragmentos.

Cuestiones relacionadas