Starten einer Aktivität mit einem Parameter

Ich bin sehr neu in der Android-Entwicklung.

Ich möchte eine Aktivität erstellen und starten, um Informationen über ein Spiel anzuzeigen. Ich zeigen, dass Informationen, die ich brauche eine gameId.

Wie kann ich diese Spiel-ID an die Aktivität übergeben? Die Spiel-ID ist absolut notwendig, so dass ich die Aktivität nicht erstellen oder starten möchte, wenn sie die ID nicht hat.

Es ist, als ob die Aktivität nur einen Konstruktor mit einem Parameter hat.

Wie kann ich das machen?

Danke!

Lösung

Fügen Sie einen int, der Ihre ID ist, in den neuen Intent ein.

Intent intent = new Intent(FirstActivity.this, SecondActivity.class);
Bundle b = new Bundle();
b.putInt("key", 1); //Your id
intent.putExtras(b); //Put your id to your next Intent
startActivity(intent);
finish();

Dann nimm die ID in deine neue Activity:

Bundle b = getIntent().getExtras();
int value = -1; // or other values
if(b != null)
    value = b.getInt("key");
Kommentare (7)

Fügen Sie einfach zusätzliche Daten zu dem Intent hinzu, mit dem Sie Ihre Aktivität aufrufen.

In der Aufrufer-Aktivität:

Intent i = new Intent(this, TheNextActivity.class);
i.putExtra("id", id);
startActivity(i);

Innerhalb der onCreate() der Aktivität rufen Sie auf:

Bundle b = getIntent().getExtras();
int id = b.getInt("id");

Bearbeiten : Ups, Charlie Sheen war schneller.

Kommentare (3)

Die vorhandenen Antworten (Übergabe der Daten im Intent, der an startActivity() übergeben wird) zeigen den normalen Weg zur Lösung dieses Problems. Es gibt eine andere Lösung, die in dem seltsamen Fall verwendet werden kann, in dem Sie eine Aktivität erstellen, die von einer anderen Anwendung gestartet wird (z.B. eine der Bearbeitungsaktivitäten in einem Tasker Plugin) und daher den Intent, der die Activity startet, nicht kontrolliert.

Sie können eine Basisklasse Activity erstellen, die einen Konstruktor mit einem Parameter hat, dann eine abgeleitete Klasse, die einen Standardkonstruktor hat, der den Basisklassenkonstruktor mit einem Wert aufruft, wie folgt:

class BaseActivity extends Activity
{
    public BaseActivity(String param)
    {
        // Do something with param
    }
}

class DerivedActivity extends BaseActivity
{
    public DerivedActivity()
    {
        super("parameter");
    }
}

Wenn Sie den Parameter generieren müssen, der an den Konstruktor der Basisklasse übergeben werden soll, ersetzen Sie einfach den fest kodierten Wert durch einen Funktionsaufruf, der den richtigen Wert zurückgibt, der übergeben werden soll.

Kommentare (0)