para - manual de programacion android pdf
Android cómo crear mi propia actividad y ampliarla? (4)
¿Qué estás tratando de lograr exactamente? ¿Tiene dos actividades diferentes con una interfaz de usuario común, a excepción de algunas variables o partes del diseño?
En este caso, sugiero tener una actividad abstracta de base y dos subclases heredadas concretas. Define todo el comportamiento común en la actividad base y tiene métodos abstractos para las diferencias, que luego anula en sus implementaciones reales.
Por ejemplo, para dos actividades con diferentes recursos de diseño:
public abstract class BaseActivity extends Activity {
@Override
public void onCreate(bundle) {
super.onCreate(bundle);
setContentView(getLayoutResourceId());
}
protected abstract int getLayoutResourceId();
}
public class Activity1 extends BaseActivity {
@Override
public void onCreate(bundle) {
super.onCreate(bundle);
// do extra stuff on your resources, using findViewById on your layout_for_activity1
}
@Override
protected int getLayoutResourceId() {
return R.layout.layout_for_activity1;
}
}
Puede tener muchos más métodos abstractos, por cada bit que desee específico para sus subclases.
Hacer eso es, en mi opinión, mucho mejor que tener una subclase concreta a una superclase concreta: eso puede llevar a muchos problemas y generalmente es difícil de depurar.
Necesito crear una clase base que amplíe la Activity
que hace algunas tareas comunes en mi aplicación y extender mis actividades desde ella, en la siguiente forma:
public BaseActivity extiende Activity {....}
SubActivity pública amplía BaseActivity {...}
en SubActivity Necesito dar valores a algunas variables y componentes de UI definidos en BaseActivity , puedo necesitar definir un diseño diferente para SubActivity de acuerdo con algún valor de indicador, también (en SubActivity ) quiero ejecutar asyncTask que se define en BaseActivity .
¿es posible? Si es así, ¿hay algún tutorial que pueda ayudar? gracias de antemano
Encontré una forma más fácil de encontrar la solución de @ Guillaume. Configure ContentView
solo una vez en su BaseActivity
y no lo configure en las actividades que lo extienden:
public abstract class BaseActivity extends Activity {
@Override
public void onCreate(bundle) {
super.onCreate(bundle);
setContentView(activity_main);
}
}
public class Activity1 extends BaseActivity {
@Override
public void onCreate(bundle) {
super.onCreate(bundle);
// setContentView(activity_activity1) // Do NOT call this.
}
}
Esta pregunta ya tiene muy buenas respuestas.
Sin embargo. mi respuesta es para aquellas personas que están buscando algún ejemplo de trabajo.
Aquí está el funcionamiento completo -> CODE
No estamos haciendo nada nuevo aquí, es como cualquier otro escenario de herencia (desea un comportamiento común en varios lugares, pero desea escribir ese comportamiento solo una vez).
VENTAJA: Proporciona una mejor legibilidad del código, facilidad de mantenimiento y bla bla. Pero no están de acuerdo con esta flexibilidad, no le importarán si su cerebro funciona como una gacela.
Estamos detrás del poder real de la herencia "CONTROL" . (Eso es lo que sucede en la vida real también. Padre que controla al niño :)).
En mi ejemplo, tengo dos actividades MainActivity y OtherActivity. Ambas actividades tienen un diseño diferente pero quiero que ambas comiencen con alguna animación o algún mensaje de bienvenida.
Nuestra primera tarea es descubrir el comportamiento común. aquí -> Actividad de inicio con animación.
Hemos encontrado la "cosa" común, ahora escribiremos ese comportamiento en BaseClass ( AnimationActivity ).
MainActivity y OtherActivity heredarán AnimationActivity.
Entonces el código se vería como `
BaseActivity
AnimationActivity {
startAnimation()
{
....
}
}
Actividades infantiles
MainActivity extends AnimationActivity{
}
OtherActivity extends AnimationActivity{
}
Este enfoque de diseño proporciona mucho control y flexibilidad (POWER OF MODIFIER).
1) CONTROL: mantenga el método de animación dentro de Crear () Cuando decida que las Actividades deberían comenzar con Animación. Mantenga su método dentro del método Crear (paquete). Ahora solo cambiando el modificador puede controlar las Actividades del niño.
Si mantienes el modificador como
final: las actividades del niño comenzarán con la Animación para padres.
Resumen: las actividades de los niños tendrán que dar su propia animación.
no modificador: las actividades secundarias pueden tener su propia animación anulando el método de animación. De lo contrario, el niño tendrá animación principal.
2) Flexibilidad: no mantenga el método de animación dentro de Crear () Puede proporcionar flexibilidad a las actividades para niños al no mantener el método de animación dentro de Crear (paquete de paquetes). Ahora las actividades pueden tener la flexibilidad de tener animación principal o su propia animación o ninguna animación.
Espero eso ayude.
Feliz aprendizaje.
`
Sí, puedes, debes tener en cuenta las reglas básicas de herencia. Heredará la actividad AsyncTask interna y las propiedades definidas en BaseActivity si las protege en lugar de hacerlo en privado. Por lo que veo ahora, creo que debes hacer que BaseActivity sea una clase abstracta, ya que solo se usarán instancias de subActivities.
Deberías simplemente comenzar y probarlo, vendrá y funcionará más fácil de lo que piensas. Si tropieza con algún problema, solo pregunte.