2012-05-18 5 views
11

Ich habe meine eigene Basis abstrakte Klasse, die Activity Klasse erweitert.Sie müssen die Basisaktivitätsklasse nicht im Manifest registrieren?

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; 
    } 
} 

Meine Basisklasse BaseActivity nicht in der Manifest Datei registriert und ich erhalte keine Fehler.

Ist das eine Zeitbombe (keine Basisklasse im Manifest) oder sollte das so sein? Kann jemand erklären warum?

Antwort

15

die Dokumentation nach, die <activity> auf dem Manifest:

erklärt, eine Aktivität (eine Aktivität Unterklasse), den Teil des die Anwendung der visuelle Benutzeroberfläche implementiert. Alle Aktivitäten müssen sein, die durch Elemente in der Manifestdatei dargestellt werden. Alle, die nicht erklärt es wird vom System nicht gesehen werden und wird nie Sicht.

Denk darüber wie folgt aus: Wenn eine Aktivität gibt es (jede Klasse, die Activity oder eine Klasse erweitert, die sie erweitert), die Sie an einem gewissen Punkt in der Anwendung zu navigieren, muss es im Manifest deklariert werden. Unabhängig von wie erreichen Sie diese Aktivität. Dies schließt Klassen aus, die nur die Klasse Activity erweitern, die Sie jedoch nicht direkt erreichen können.

Source

+0

Ihre Antwort ist irgendwie irreführend. Sie sagen, es ist eine Zeitbombe, die BaseActivity nicht im Manifest zu registrieren, aber Sie fahren fort zu sagen, es NICHT zu registrieren – dymmeh

+0

Keine Sorge. Danke für die Klärung :) – dymmeh

10

Sie tun sie nicht Notwendigkeit BaseActivity Klasse in manifest weil es nicht die, die Sie in der Absicht rufen zu registrieren zu starten.

zum Beispiel:

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

In obigem Code, müssen Sie Activity1 Aktivität in manifest registriert haben, weil Sie es in der Absicht sind zu erwähnen, nicht die BaseActivity Klasse.

+1

^This. Wenn Sie die BaseActivity nicht selbst ausführen möchten, müssen Sie nur die Aktivitäten registrieren, die sie erweitern. – dymmeh

+0

ja, natürlich ... logisch * konkrete * Klassen sollten registriert werden. – waqaslam

+0

ein Grund für die Abstimmung unten? – waqaslam