2013-08-30 1 views
8

Ho problemi ad applicare il concetto di ereditarietà alle attività Android - ad es. ActivityA extends Activity e ActivityB extends ActivityA, quindi se lancio con ActivityB quindi il metodo onCreate() per entrambe le attività vengono chiamate (A poi B).Ereditarietà tra le attività in Android

La mia domanda è, in tipico Java, onCreate da ActvityA dovrebbe essere sovrascritto, ma onCreate si comporta piuttosto come un costruttore anche se è una funzione. Come funziona l'ereditarietà in Android, esp. altre funzioni come onPause(), onResume ecc.?

EDIT: Ho notato anche che ActivityA può avere molti metodi astratti chiamati nel suo onCreate() le cui definizioni sono fornite in ActivityB. Come funziona ?

+0

sì è possibile –

+0

'esp. ha altre funzioni di stato? 'per favore definisci quella frase. Non capisco –

+0

+1 per bella domanda. !! – MKJParekh

risposta

6

Se avete la vostra attività di base e poi estenderlo in questo modo Activity ->Activity A significa che quando l'onCreate di Activity A si chiama e si chiama super.onCreate(); allora il metodo dell'originale ActivityonCreate() è anche chiamato.

Se quindi estendere Activity A in Activity B le chiamate di lavoro in questo modo ...

Activity B.onCreate()-super.onCreate(); ->Activity A.onCreate()-super.onCreate() ->Activity.onCreate().

Non è un costruttore, è un metodo chiamato per creare lo Activities. Se li estendi da altri Activities la sua superclasse verrà chiamata tramite il suo metodo super. Ciò non significa che verranno creati anche gli Activities che hai ereditato. Activity B sarà creato Activity.

MODIFICA:This page sul sito web degli sviluppatori Android è molto utile in quanto illustra visivamente il ciclo di vita dell'Android Activity.

+1

Vorrei inoltre sottolineare che il motivo per cui onCreate deve essere al posto del costruttore, è che nel cambio di orientamento, l'oggetto non deve essere ricostruito. –

+0

ahh .. come mi è mancato super.onCreate() grazie mille e potresti anche spiegare come funzionano i metodi astratti (ho modificato la domanda) – AndroidLearnMachine

+0

@AndroidLearnMachine di quali metodi stai parlando? – StuStirling

1

Sì come una tipica funzione java suCreate avrebbe dovuto essere ereditata ma non ottiene: perché? - Perché non è solo un metodo, è una fase del ciclo di vita.

AFAIK, Activity non è solo una classe java ma è un tipo speciale di una classe JAVA che ha il proprio ciclo di vita e le fasi del ciclo di vita sono chiamate per essere chiamate ogni volta che si utilizza quella classe/attività anche se si hanno dichiarato o meno quei metodi suCreate(), onPause() etc viene chiamato di sicuro.

Così ogni volta che l'attività di base verrà creata e distrutta. Questa è la natura.

In caso di problemi, è possibile provare a utilizzare classi astratte, interfacce e qualsiasi altra classe pubblica per avere codice comune ereditato in tutte le attività.