Domanda

C'è un modo per cambiare dinamicamente l'attività di partenza in Android in base a un condizionalmente? Quello che ho tentato di fare (che non ha funzionato) è stato il seguente:

  1. Rimuovi la categoria Launcher come definito nel mio AndroidManifest.xml
  2. Crea una classe applicazione personalizzata utilizzata dall'app
  3. Sostituire il metodo Oncreate della mia classe di applicazione per definire un codice come il seguente:

.

if (condition) {
    startActivity(new Intent(this, MenuActivity.class));
} else {
    startActivity(new Intent(this, LoginActivity.class));
}
È stato utile?

Soluzione

Perché non avere una iniziale Activity senza interfaccia utente che controlla la condizione nella sua onCreate, quindi lancia il prossimo Activity, quindi chiama finish() su se stesso? Non ho mai chiamato finish() dall'interno onCreate() Tuttavia, quindi non sono sicuro che funzionerà.

MODIFICARE
Sembra funzionare bene. Ecco un po 'di codice per renderlo più chiaro.
Iniziale Activity:

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    Intent intent;
    if (condition) {
       intent = new Intent(this, ClassA.class);
    } else {
       intent = new Intent(this, ClassB.class);
    }
    startActivity(intent);
    finish();
    // note we never called setContentView()
}

Altro Activity:

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);
}

Altri suggerimenti

Ecco cosa ho fatto personalmente per uno dei miei piccoli progetti mobili. Invece di creare uno schermo separato Activity dove si trova la condizione e che lancia lo schermo corrispondente, metto la condizione in uno Activity e ha fatto una dinamica setContentView(), come in:

if (!userIsLoggedIn) {
    setContentView(R.layout.signup);
} else {
    setContentView(R.layout.homescreen);
}

Due note importanti a questo approccio:

1: invece di scriverlo onCreate(), vuoi mettere dentro il processo decisionale onResume() Proprio perché quest'ultimo viene sempre chiamato ogni volta che lo schermo deve essere visualizzato davanti. Puoi vederlo dall'androide Ciclo di vita dell'attività. Quindi, se, ad esempio, l'utente ha appena scaricato la mia app e l'ha lanciata per la prima volta, poiché nessun utente è effettuato l'accesso, verrà condotta alla pagina di iscrizione. Quando ha finito di iscriversi e per qualche motivo preme il HOME pulsante (no BACK, che esce dall'app del tutto!) E poi riprende l'app, il layout che vedrà è già la schermata principale. Se metto il condizionale dentro onCreate(), ciò che sarebbe stato visualizzato è lo schermo di iscrizione perché, secondo il ciclo di vita, non torna indietro a onCreate() Quando si riporta un'app sul davanti.

2: questa soluzione è ideale solo se la fusione delle funzionalità di queste due attività non produrrebbe un lungo blocco di codice diabolico. Come ho detto, il mio progetto era piccolo (la sua caratteristica principale si verifica in background), in modo che una singola dinamica Activity Non ne aveva troppo. Lo schermo senza schermo Activity è sicuramente la strada da percorrere se hai bisogno del tuo codice per essere più leggibile dall'uomo.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top