So starten Sie eine neue Aktivität beim Klicken auf die Schaltfläche

Antworten:

1116

Einfach.

Intent myIntent = new Intent(CurrentActivity.this, NextActivity.class);
myIntent.putExtra("key", value); //Optional parameters
CurrentActivity.this.startActivity(myIntent);

Extras werden auf der anderen Seite abgerufen über:

@Override
protected void onCreate(Bundle savedInstanceState) {
    Intent intent = getIntent();
    String value = intent.getStringExtra("key"); //if it's a string you stored.
}

Vergessen Sie nicht, Ihre neue Aktivität in die Datei AndroidManifest.xml aufzunehmen:

<activity android:label="@string/app_name" android:name="NextActivity"/>
Emmanuel
quelle
18
Wo ist der Button-Klick-Teil? (Schaltfläche klicken → Übergang zur nächsten Aktivität)
Jonny
4
@Jonny: Hier ist ein Beispiel für einen Klick auf eine Schaltfläche. stackoverflow.com/a/7722428/442512
Emmanuel
8
Gibt es einen Unterschied zwischen CurrentActivity.this.startActivity(myIntent)und startActivity(myIntent)?
Verwirren Sie den
5
Ja, einfach lol. Es gibt mehr Codemissing als tatsächlich eingegebenen Code. Wo fehlen die gesamte XML-Schnittstelle und der Java-Code? Downvote
Liquid Core
111
Liquid, möchtest du, dass er es auch in eine apk packt? ;)
Casey Murray
60

Erstellen Sie eine Absicht für eine ViewPerson-Aktivität und übergeben Sie die PersonID (z. B. für eine Datenbanksuche).

Intent i = new Intent(getBaseContext(), ViewPerson.class);                      
i.putExtra("PersonID", personID);
startActivity(i);

In ViewPerson Activity können Sie dann das Bündel zusätzlicher Daten abrufen, sicherstellen, dass es nicht null ist (falls Sie manchmal keine Daten übergeben), und dann die Daten abrufen.

Bundle extras = getIntent().getExtras();
if(extras !=null)
{
     personID = extras.getString("PersonID");
}

Wenn Sie jetzt Daten zwischen zwei Aktivitäten austauschen müssen, können Sie auch einen globalen Singleton verwenden.

public class YourApplication extends Application 
{     
     public SomeDataClass data = new SomeDataClass();
}

Rufen Sie es dann in einer beliebigen Aktivität auf, indem Sie:

YourApplication appState = ((YourApplication)this.getApplication());
appState.data.CallSomeFunctionHere(); // Do whatever you need to with data here.  Could be setter/getter or some other type of logic
Bryan Denny
quelle
58

Aktuelle Antworten sind großartig, aber für Anfänger ist eine umfassendere Antwort erforderlich. Es gibt drei verschiedene Möglichkeiten, um eine neue Aktivität in Android zu starten, und alle verwenden dieIntent Klasse. Absicht | Android-Entwickler .

  1. Verwenden des onClickAttributs der Schaltfläche. (Anfänger)
  2. Zuweisen einer OnClickListener()über eine anonyme Klasse. (Mittlere)
  3. Aktivitätsweite Schnittstellenmethode mit dem switch Anweisung. (Profi)

Hier ist die Link zu meinem Beispiel, wenn Sie mitmachen möchten:

1. Verwenden Sie das onClickAttribut der Schaltfläche. (Anfänger)

Schaltflächen haben ein onClickAttribut, das sich in der XML-Datei befindet:

<Button
    android:id="@+id/button1"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:onClick="goToAnActivity"
    android:text="to an activity" />

<Button
    android:id="@+id/button2"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:onClick="goToAnotherActivity"
    android:text="to another activity" />

In der Java-Klasse:

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

public void goToAnActivity(View view) {
    Intent intent = new Intent(this, AnActivity.class);
    startActivity(intent);
}

public void goToAnotherActivity(View view) {
    Intent intent = new Intent(this, AnotherActivity.class);
    startActivity(intent);
}

Vorteil : Einfach im laufenden Betrieb herzustellen, modular und einfach mehrere einzustellenonClick s auf die gleiche Absicht .

Nachteil : Schwierige Lesbarkeit bei der Überprüfung.

2. Zuweisen eines OnClickListener() über eine anonyme Klasse. (Mittlere)

Dies ist der Fall, wenn Sie setOnClickListener()für jeden einen eigenen Wert festlegen buttonund jeden überschreibenonClick() einen eigenen Wert fest mit seiner eigenen Absicht.

In der Java-Klasse:

@Override
protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main_activity);

        Button button1 = (Button) findViewById(R.id.button1);
        button1.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                Intent intent = new Intent(view.getContext(), AnActivity.class);
                view.getContext().startActivity(intent);}
            });

        Button button2 = (Button) findViewById(R.id.button2);
        button2.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                Intent intent = new Intent(view.getContext(), AnotherActivity.class);
                view.getContext().startActivity(intent);}
            });

Vorteil : Einfach im laufenden Betrieb herzustellen.

Nachteil : Es wird viele anonyme Klassen geben, die die Lesbarkeit beim Überprüfen erschweren.

3. Aktivitätsweite Schnittstellenmethode mit dem switch Anweisung. (Profi)

In diesem Fall verwenden Sie eine switchAnweisung für Ihre Schaltflächen innerhalb deronClick() Methode, um alle Schaltflächen der Aktivität zu verwalten.

In der Java-Klasse:

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main_activity);

    Button button1 = (Button) findViewById(R.id.button1);
    Button button2 = (Button) findViewById(R.id.button2);
    button1.setOnClickListener(this);
    button2.setOnClickListener(this);
}

@Override
public void onClick(View view) {
    switch (view.getId()){
        case R.id.button1:
            Intent intent1 = new Intent(this, AnActivity.class);
            startActivity(intent1);
            break;
        case R.id.button2:
            Intent intent2 = new Intent(this, AnotherActivity.class);
            startActivity(intent2);
            break;
        default:
            break;
    }

Vorteil : Einfache Tastenverwaltung, da alle Tastenabsichten in einer einzigen onClick()Methode registriert werden


Den zweiten Teil der Frage, Daten übergeben, finden Sie unter Wie übergebe ich Daten zwischen Aktivitäten in einer Android-Anwendung?

Martin Sing
quelle
Ausgezeichnete Antwort, danke! Kennen Sie Leistungseinbußen, wenn Sie einen der Vorschläge verwenden?
lmedinas
3
# 3 ist nicht "Pro". Es ist die am wenigsten lesbare und wartbare Option und wird vom ersten erfahrenen Entwickler, der sie sieht, in Nummer 1 oder Nummer 2 umgestaltet. (Oder sie verwenden Butterknife, die Option Nr. 1 für Steroide.)
Kevin Krumwiede
Ich denke, Pro-Programmierer mögen # 3 überhaupt nicht. Putting, Idk, 10 Buttons Click Handler in 1 Methode ist ein Albtraum und überhaupt nicht professionell. Methode mit zilion Codezeilen macht Sie nicht professionell. KUSS .
Mehdi Dehghani
3 ist definitiv nicht "Pro"
Kaiser Keister
36

Wenn der Benutzer auf die Schaltfläche klickt, direkt im XML wie folgt:

<Button
         android:id="@+id/button"
         android:layout_width="wrap_content"
         android:layout_height="wrap_content"
         android:text="TextButton"
         android:onClick="buttonClickFunction"/>

Mit dem Attribut android:onClickdeklarieren wir den Methodennamen, der in der übergeordneten Aktivität vorhanden sein muss. Also muss ich diese Methode in unserer Aktivität so erstellen:

public void buttonClickFunction(View v)
{
            Intent intent = new Intent(getApplicationContext(), Your_Next_Activity.class);
            startActivity(intent);
}
IntelliJ Amiya
quelle
19
Intent iinent= new Intent(Homeactivity.this,secondactivity.class);
startActivity(iinent);
Vishal Rangani
quelle
2
Dies ist nur eine teilweise Antwort. Darüber hinaus reicht es nicht aus, dh es funktioniert nicht ohne zusätzliche Änderungen im Projekt.
andr
10
    Intent in = new Intent(getApplicationContext(),SecondaryScreen.class);    
    startActivity(in);

    This is an explicit intent to start secondscreen activity.
user1923551
quelle
8

Emmanuel,

Ich denke, die zusätzlichen Informationen sollten vor dem Start der Aktivität eingegeben werden, da die Daten sonst noch nicht verfügbar sind, wenn Sie mit der onCreate-Methode von NextActivity darauf zugreifen.

Intent myIntent = new Intent(CurrentActivity.this, NextActivity.class);

myIntent.putExtra("key", value);

CurrentActivity.this.startActivity(myIntent);
user1337489
quelle
7

Versuchen Sie in der Sendeaktivität den folgenden Code

   //EXTRA_MESSAGE is our key and it's value is 'packagename.MESSAGE'
    public static final String EXTRA_MESSAGE = "packageName.MESSAGE";

    @Override
    protected void onCreate(Bundle savedInstanceState) {
       ....

        //Here we declare our send button
        Button sendButton = (Button) findViewById(R.id.send_button);
        sendButton.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                //declare our intent object which takes two parameters, the context and the new activity name

                // the name of the receiving activity is declared in the Intent Constructor
                Intent intent = new Intent(getApplicationContext(), NameOfReceivingActivity.class);

                String sendMessage = "hello world"
                //put the text inside the intent and send it to another Activity
                intent.putExtra(EXTRA_MESSAGE, sendMessage);
                //start the activity
                startActivity(intent);

            }

Versuchen Sie in der empfangenden Aktivität den folgenden Code:

   protected void onCreate(Bundle savedInstanceState) {
 //use the getIntent()method to receive the data from another activity
 Intent intent = getIntent();

//extract the string, with the getStringExtra method
String message = intent.getStringExtra(NewActivityName.EXTRA_MESSAGE);

Fügen Sie dann einfach den folgenden Code zur Datei AndroidManifest.xml hinzu

  android:name="packagename.NameOfTheReceivingActivity"
  android:label="Title of the Activity"
  android:parentActivityName="packagename.NameOfSendingActivity"
Alex Irabor
quelle
7
Intent i = new Intent(firstactivity.this, secondactivity.class);
startActivity(i);
Mahtab
quelle
7

Versuchen Sie diese einfache Methode.

startActivity(new Intent(MainActivity.this, SecondActivity.class));
Joseph Sarz
quelle
5

Sie können diesen Code ausprobieren:

Intent myIntent = new Intent();
FirstActivity.this.SecondActivity(myIntent);
Prinkal
quelle
4

Der Weg, um neue Aktivitäten zu starten, besteht darin, eine Absicht zu senden. Es gibt eine bestimmte Art von Absicht, mit der Sie Daten von einer Aktivität an eine andere übergeben können. Meine Empfehlung ist, dass Sie sich die Android-Entwicklerdokumente ansehen, die sich auf Absichten beziehen . Es ist eine Fülle von Informationen zu diesem Thema und hat auch Beispiele.

Brian Driscoll
quelle
4

Kotlin

Erste Aktivität

startActivity(Intent(this, SecondActivity::class.java)
  .putExtra("key", "value"))

Zweite Aktivität

val value = getIntent().getStringExtra("key")

Vorschlag

Legen Sie die Schlüssel immer in einer konstanten Datei ab, um sie besser verwalten zu können.

companion object {
    val PUT_EXTRA_USER = "user"
}
startActivity(Intent(this, SecondActivity::class.java)
  .putExtra(PUT_EXTRA_USER, "value"))
Khemraj
quelle
4

Das Starten einer Aktivität von einer anderen Aktivität aus ist unter Android-Anwendungen ein sehr häufiges Szenario.
Um eine Aktivität zu starten, benötigen Sie ein Intent- Objekt.

Wie erstelle ich Absichtsobjekte?

Ein Intent-Objekt nimmt in seinem Konstruktor zwei Parameter an

  1. Kontext
  2. Name der zu startenden Aktivität . (oder vollständiger Paketname)

Beispiel:

Geben Sie hier die Bildbeschreibung ein

Wenn Sie beispielsweise zwei Aktivitäten haben, sagen Sie HomeActivityund DetailActivityund DetailActivityvon HomeActivity (HomeActivity -> DetailActivity) ausgehen möchten.

Hier ist das Code-Snippet, das zeigt, wie DetailActivity gestartet wird

HomeActivity.

Intent i = new Intent(HomeActivity.this,DetailActivity.class);
startActivity(i);

Und du bist fertig.

Zurück zum Button-Klick-Teil.

Button button = (Button) findViewById(R.id.someid);

button.setOnClickListener(new View.OnClickListener() {

     @Override
     public void onClick(View view) {
         Intent i = new Intent(HomeActivity.this,DetailActivity.class);
         startActivity(i);  
      }

});
Rohit Singh
quelle
3

Starten Sie eine andere Aktivität von dieser Aktivität aus und Sie können Parameter auch über Bundle Object übergeben.

Intent intent = new Intent(getBaseContext(), YourActivity.class);
intent.putExtra("USER_NAME", "[email protected]");
startActivity(intent);

Daten in einer anderen Aktivität abrufen (YourActivity)

String s = getIntent().getStringExtra("USER_NAME");
DroidNinja
quelle
2

Implementieren Sie die View.OnClickListener-Schnittstelle und überschreiben Sie die onClick-Methode.

ImageView btnSearch;

 @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_search1);
        ImageView btnSearch = (ImageView) findViewById(R.id.btnSearch);
        btnSearch.setOnClickListener(this);
    }

@Override
    public void onClick(View v) {
        switch (v.getId()) {
            case R.id.btnSearch: {
                Intent intent = new Intent(Search.this,SearchFeedActivity.class);
                startActivity(intent);
                break;
            }
user1918566
quelle
2

Es wurden zwar bereits richtige Antworten gegeben, aber ich bin hier, um die Antwort in der Sprache Kotlin zu suchen. Diese Frage ist nicht sprachspezifisch, daher füge ich den Code hinzu, um diese Aufgabe in Kotlin-Sprache auszuführen.

Hier erfahren Sie, wie Sie dies in Kotlin für Andorid tun

testActivityBtn1.setOnClickListener{
      val intent = Intent(applicationContext,MainActivity::class.java)
      startActivity(intent)

 }
Abdul Rehman
quelle
2

Die einfachste Möglichkeit, Aktivitäten beim Klicken auf eine Schaltfläche zu öffnen, ist:

  1. Erstellen Sie zwei Aktivitäten im Ordner res, fügen Sie der ersten Aktivität eine Schaltfläche hinzu und geben Sie der onclickFunktion einen Namen .
  2. Für jede Aktivität sollten zwei Java-Dateien vorhanden sein.
  3. Unten ist der Code:

MainActivity.java

import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.TextView;
import android.content.Intent;
public class MainActivity extends AppCompatActivity {
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
    }

    public void goToAnotherActivity(View view) {
        Intent intent = new Intent(this, SecondActivity.class);
        startActivity(intent);
    }
}

SecondActivity.java

package com.example.myapplication;
import android.app.Activity;
import android.os.Bundle;
public class SecondActivity extends Activity {
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity1);
    }
}

AndroidManifest.xml (Fügen Sie einfach diesen Codeblock zum vorhandenen hinzu)

 </activity>
        <activity android:name=".SecondActivity">
  </activity>
sn n
quelle
1

Nehmen Sie zuerst Button in XML.

  <Button
        android:id="@+id/pre"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:background="@mipmap/ic_launcher"
        android:text="Your Text"
        />

Listener der Schaltfläche machen.

 pre.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            Intent intent = new Intent(MainActivity.this, SecondActivity.class);
            startActivity(intent);
        }
    });
Jayesh Prajapati
quelle
1

Wenn auf die Schaltfläche geklickt wird:

loginBtn.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View view) {
        Intent intent= new Intent(getApplicationContext(), NextActivity.class);
        intent.putExtra("data", value); //pass data
        startActivity(intent);
    }
});

Um die zusätzlichen Daten zu erhalten von NextActivity.class:

Bundle extra = getIntent().getExtras();
if (extra != null){
    String str = (String) extra.get("data"); // get a object
}
Hasib Akter
quelle
1

Schreiben Sie den Code in Ihrer ersten Aktivität.

button.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View view) {


Intent intent = new Intent(MainActivity.this, SecondAcitvity.class);
                       //You can use String ,arraylist ,integer ,float and all data type.
                       intent.putExtra("Key","value");
                       startActivity(intent);
                        finish();
            }
         });

In secondActivity.class

String name = getIntent().getStringExtra("Key");
Gyan Swaroop Awasthi
quelle
1

Platzieren Sie das Schaltflächen-Widget wie unten in XML

<Button
    android:id="@+id/button"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="Button"
/>

Nach dieser Initialisierung und Bearbeitung des Klick-Listeners in Aktivität wie unten.

In der Methode "Aktivität beim Erstellen":

Button button =(Button) findViewById(R.id.button); 
button.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View view) {
       Intent intent = new 
            Intent(CurrentActivity.this,DesiredActivity.class);
            startActivity(intent);
    }
});
prakash421
quelle