2010-04-28 9 views
5

Al programar en Android, termino escribiendo una actividad para padres que se extiende por varias otras. Un poco como ListActivity. Mi actividad para padres se extiende al Activity. si tengo la intención de usar un Map o un List, no puedo usar mi actividad parental como superclase: la actividad secundaria solo puede ampliar una actividad obviamente. Como tal, termino escribiendo mis actividades principales con la misma lógica para Activity, ListActivity, MapActivity y más.¿Patrón de diseño para ampliar las actividades de Android?

Lo que estoy buscando es algún tipo de funcionalidad de rasgo/patrón de diseño que ayudaría en este caso. ¿Alguna sugerencia?

Respuesta

1

he terminado con una base MyAbstractActivity extends Activity que incorpora la lógica compartida y un MyAbstractListActivity extends MyAbstractActivity que imita ListActivity (infla layout.R.id.list, layout.R.id.empty, etc .; no hay mucho que hacer allí).

3

Realmente no me gusta ListActivity, MapActivity etc. Básicamente son actividades que simplemente agregan un elemento de vista única a costa de cierta flexibilidad. Agregando un MapView o ListView a su XML apropiadamente, termina con lo mismo que puede extender una superclase derivada Activity directamente. Entonces, no use ninguna de esas clases de SomethingActivity en su mayor parte.

+0

No solo está agregando una vista. Tiene el ciclo de vida del mapa/controlador de cursor y demás, dependiendo de la actividad que use. Los beneficios pueden no equilibrar la inflexibilidad pero definitivamente se gana cierto código al usar clases predispuestas. – charroch

1

Estoy usando un delegate con todas las funciones compartidas. Esto me permite tener toda la funcionalidad compartida en una sola clase para todas las diferentes actividades.
Todas mis actividades extienden su actividad especial y luego implementan una interfaz común. El problema con este enfoque es que necesito implementar todos los métodos definidos en la interfaz y llamar al método de coincidencia en el objeto delegado. Este código en este momento equivale a 30 líneas duplicadas de código y creo que no es un gran problema.

Cuestiones relacionadas