2012-05-18 7 views
11

Tengo mi propia clase abstracta base que amplía la clase Activity.¿No es necesario registrar la clase de actividad base en el Manifiesto?

public abstract class BaseActivity extends Activity { 
    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(getLayoutResourceId()); 
    } 

    protected abstract int getLayoutResourceId(); 
} 

public class Activity1 extends BaseActivity { 
    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     // do extra stuff 
    } 

    @Override 
    protected int getLayoutResourceId() { 
     return R.layout.layout_for_activity1; 
    } 
} 

Mi clase base BaseActivity no está registrado en el archivo Manifest y no hay nada de error.

¿Es esta una bomba de tiempo (no registra la clase base en Manifiesto) o esta es la forma en que debería ser? ¿Alguien puede explicar por qué?

Respuesta

15

De acuerdo con los documentos, la <activity> en el manifiesto:

Declara una actividad (una subclase de Actividad) que implementa parte de interfaz de usuario visual de la aplicación. Todas las actividades deben ser representadas por elementos en el archivo de manifiesto. Cualquier que son no declarada no será visto por el sistema y nunca habrá plazo.

Piense en ello como esto: Si hay una actividad (de cualquier clase que se extiende Activity o una clase que amplía) que va a navegar hasta en algún momento de su aplicación, tiene que ser declarada en el manifiesto. Independientemente de cómo llega a esa actividad. Esto excluye las clases que solo amplían la clase Activity pero no se puede acceder directamente.

Source

+0

Su respuesta es errónea. Usted dice que es una bomba de tiempo para no registrar BaseActivity en el manifiesto, pero continúa diciendo NO registrarlo – dymmeh

+0

Sin preocupaciones. Gracias por aclarar :) – dymmeh

10

Usted Dont necesidad de registrar la clase BaseActivity en el manifiesto porque no es la persona que llama en la intención de poner en marcha.

por ejemplo:

Intent i = new Intent(context, Activity1.class); 
startActivity(i); 

En el código anterior, es necesario tener Activity1 actividad registrado en el manifiesto porque usted está mencionando que en la intención, no la clase BaseActivity.

+1

^Esto. A menos que planee ejecutar realmente BaseActivity por sí mismo, solo necesita registrar las Actividades que lo están extendiendo. – dymmeh

+0

sí, por supuesto ... lógicamente * clases de concreto * deben ser registradas. – waqaslam

+0

¿Alguna razón para votar a la baja? – waqaslam

Cuestiones relacionadas