Frage

Gibt es eine Möglichkeit, die Startaktivität in Android dynamisch zu verändern, basierend auf einem bedingt? Was ich zu tun versuchte (das funktionierte nicht), war Folgendes:

  1. Entfernen Sie die Launcher -Kategorie wie in meinem AndroidManifest.xml definiert
  2. Erstellen Sie eine benutzerdefinierte Anwendungsklasse, die die App verwendet
  3. Überschreiben Sie die OnCreate -Methode meiner Anwendungsklasse, um einen Code wie folgt zu definieren:

.

if (condition) {
    startActivity(new Intent(this, MenuActivity.class));
} else {
    startActivity(new Intent(this, LoginActivity.class));
}
War es hilfreich?

Lösung

Warum nicht eine Initiale haben? Activity ohne Benutzeroberfläche, der den Zustand in seinem überprüft onCreate, startet dann die nächste Activity, ruft dann an finish() auf sich selbst? Ich habe nie angerufen finish() von innen onCreate() Ich bin mir also nicht sicher, ob dies funktionieren wird.

BEARBEITEN
Scheint gut zu funktionieren. Hier ist ein Code, um es klarer zu machen.
Initial 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()
}

Sonstiges Activity:

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

Andere Tipps

Folgendes habe ich persönlich für eines meiner kleinen mobilen Projekte getan. Anstatt eine separate Bildschirmless zu erstellen Activity Wo der Zustand ist und der den entsprechenden Bildschirm startet, habe ich die Bedingung in einen einsetzt Activity und machte eine Dynamik setContentView(), wie in:

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

Zwei wichtige Hinweise zu diesem Ansatz:

1: Anstatt das einzuschreiben onCreate(), Sie möchten die Entscheidungsfindung ins Haus setzen onResume() Gerade weil letzteres immer aufgerufen wird, wenn der Bildschirm voran angezeigt werden muss. Sie können das aus dem Android sehen Aktivitätslebenszyklus. Wenn der Benutzer beispielsweise meine App gerade heruntergeladen und zum ersten Mal gestartet hat, da kein Benutzer angemeldet ist, wird sie zur Anmeldeseite geführt. Wenn sie sich angemeldet hat und aus irgendeinem Grund die HOME Taste (nicht BACK, was die App insgesamt verlässt!) Und dann die App wieder aufnimmt. Das Layout, das sie sehen wird, ist bereits die des Startbildschirms. Wenn ich die bedingte Innenräume setze onCreate(), was angezeigt worden wäre, ist der Anmeldebildschirm, da es nach dem Lebenszyklus nicht zurückgeht onCreate() beim Rückbringen einer App nach vorne.

2: Diese Lösung ist nur ideal, wenn das Zusammenführen der Funktionen dieser beiden Aktivitäten keinen langen teuflischen Codeblock erzeugen würde. Wie ich schon sagte, mein Projekt war ein kleiner Activity Hatte nicht zu viel darin. Der Bildschirm ohne Activity Ist definitiv der richtige Weg, wenn Sie Ihren Code benötigen, um menschlicher lesbar zu sein.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top