2012-05-18 19 views
11

Ho la mia classe astratta di base che estende la classe Activity.Non è necessario registrare la classe di attività di base nel manifesto?

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

La mia classe di base BaseActivity non è registrata nel file Manifest e non c'è niente di errore.

Questa è una bomba a tempo (non si registra la classe base in Manifest) o questo è il modo in cui dovrebbe essere? Qualcuno può spiegare perché?

risposta

15

Secondo la documentazione, la <activity> sul manifesto:

dichiara un'attività (una sottoclasse Attività) che implementa parte del interfaccia utente visiva dell'applicazione. Tutte le attività devono essere rappresentate da elementi nel file manifest. Qualsiasi che sono non dichiarate non ci sarà visto dal sistema e non sarà mai run.

Pensateci in questo modo: Se c'è un'attività (ogni classe che estende Activity o una classe che estende esso) che si navigherà ad un certo punto nella vostra applicazione, ha bisogno di essere dichiarati nel manifesto. A prescindere da , come raggiungi tale attività. Ciò esclude le classi che estendono solo la classe Activity ma non le puoi raggiungere direttamente.

Source

+0

La tua risposta è fuorviante. Si dice che una timebomb non registra la BaseActivity nel manifest, eppure si procede per dire NON per registrarlo. – dymmeh

+0

Nessun problema. Grazie per aver chiarito :) – dymmeh

10

È Non bisogno di registrarsi classe BaseActivity nel manifesta perché la sua non colui che chiamate negli intenti per lanciare.

ad esempio:

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

Nel codice di cui sopra, è necessario disporre di Activity1 attività registrato nel manifesto, perché si sta farne menzione negli intenti, non classe BaseActivity.

+1

^This. A meno che non si preveda di eseguire effettivamente BaseActivity da solo, è necessario registrare le Attività che lo stanno estendendo. – dymmeh

+0

sì, certo ... logicamente * le classi concrete * devono essere registrate. – waqaslam

+0

alcun motivo per il down-vote? – waqaslam

Problemi correlati