2013-10-06 11 views
9

Ho un'attività che avvia un'altra attività. È obbligatorio specificare l'attività principale nel manifesto Android? Sto chiedendo questo perché potrebbero esserci altre attività che inizieranno anche questa, quindi dovrei specificarle tutte?Devo specificare il nome dell'attività principale nel Manifest Android?

android:parentActivityName="com.example.myfirstapp.MainActivity" 

risposta

17

Come per docs -> sezione Android: parentActivityName:

il sistema legge questo attributo per determinare quali attività deve essere avviato quando l'utente preme il pulsante Up nella barra delle azioni. Il sistema può anche utilizzare queste informazioni per sintetizzare una serie di attività con TaskStackBuilder.

voi dovrete solo specificare che se avete intenzione di utilizzare up-navigazione (in contrapposizione alla navigazione con il tasto indietro) o TaskStackBuilder. In altri casi, non ne hai bisogno.

Arrivo qui circa up-navigazione: http://developer.android.com/design/patterns/navigation.html

+0

wow, questo ha molto senso! Grazie! –

0

Usa <category android:name="android.intent.category.LAUNCHER" /> come principale.

Ad esempio:

<intent-filter> 
<action android:name="android.intent.action.MAIN" /> 
<category android:name="android.intent.category.LAUNCHER" /> 
</intent-filter> 

Tutte le altre attività che è possibile impostare come android:launchMode="singleTask">

+0

devo impostarli come singleTask? –

+0

Niente affatto, quando viene avviata un'attività 'singleTask' esistente, tutte le altre attività sopra lo stesso verranno distrutte. –

0

È necessario specificare ogni attività nel manifesto che voi chiamate tramite l'intenzione o Lanciatori, che il sistema può trovare. Quindi, contrassegna un'attività come Avvio automatico per avviare l'app e registrare ogni altra attività, che chiami nella tua app.

Se si dispone di un BaseActivity come questo:

public class BaseActivity extends Activity{} 

public class MyActivity extends BaseActivity{} 

di quanto è sufficiente registrarsi MyActivity, perché BaseActivity non è chiamato dal sistema, ma voi.

+0

Cosa succede se BaseActivity e MyActivity hanno attività genitori diverse? – alex

0

No la sua non è necessario specificare l'attività principale nella manifest come questo

android:parentActivityName="com.example.myfirstapp.MainActivity" 

per navigationUp è anche possibile utilizzare setDisplayHomeAsUpEnabled(true); e onSupportNavigateUp() metodo Take a Look at this

2

Non è necessariamente bisogno di definire la parentActivity nel AndroidManifest.xml. È possibile utilizzare il seguente codice per la navigazione indietro abilitato:

ActionBar actionBar = getSupportActionBar(); 
     if (actionBar != null) { 
      actionBar.setDisplayHomeAsUpEnabled(true); 
     } 

e implementare questo:

public boolean onOptionsItemSelected(MenuItem item) { 
    int itemId = item.getItemId(); 
    if (itemId == android.R.id.home) { 
     onBackPressed(); 
    } 
    return super.onOptionsItemSelected(item); 
} 

Ma se si definisce l'parentActivity nel manifesto, allora il sistema legge questo attributo per determinare quale l'attività dovrebbe essere avviato quando l'utente preme il pulsante Su nella barra delle azioni. Ad esempio, creerà una nuova istanza di parentAcivity, significa che chiamerà lo onCreate() dell'attività padre.

+0

Come dici tu, il metodo manifest crea una nuova istanza, quindi l'onOptionsItemSelected non lo fa? – matttm

Problemi correlati