it-swarm.com.de

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

Wie starten Sie in einer Android-Anwendung eine neue Aktivität (GUI), wenn Sie auf eine Schaltfläche in einer anderen Aktivität klicken, und wie übergeben Sie Daten zwischen diesen beiden Aktivitäten?

541
Adham

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:

@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 der AndroidManifest.xml hinzuzufügen:

<activity Android:label="@string/app_name" Android:name="NextActivity"/>
982
Emmanuel

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).

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

Wenn Sie nun Daten zwischen zwei Aktivitäten teilen müssen, können Sie auch ein Global Singleton verwenden.

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

Dann rufen Sie es bei jeder Aktivität auf:

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
52
Bryan Denny

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

  1. Verwenden des onClick-Attributs der Schaltfläche. (Anfänger)
  2. Zuweisung einer OnClickListener() über eine anonyme Klasse. (Mittlere) 
  3. Aktivitätsweite Schnittstellenmethode, die die Anweisung switch verwendet. (Profi)

Hier ist der Link zu meinem Beispiel, wenn Sie folgen möchten: https://github.com/martinsing/ToNewActivityButtons

1. Verwenden Sie das onClick-Attribut der Schaltfläche. (Anfänger)

Schaltflächen haben ein onClick-Attribut, 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 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);
}

Advantage: Einfach zu erstellen, modular und kann leicht mehrere onClicks auf dieselbe Absicht einstellen. 

Nachteil: Schwierige Lesbarkeit bei der Überprüfung.

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

Dies ist der Fall, wenn Sie für jede button eine eigene setOnClickListener() festlegen und jede onClick() mit ihrer eigenen Absicht überschreiben. 

In Java-Klasse: 

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

        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);}
            });

        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);}
            });

Advantage: Einfach on the fly zu machen. 

Nachteil: Es wird viele anonyme Klassen geben, die die Lesbarkeit bei der Überprüfung erschweren.

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

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

In Java-Klasse:

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

    button1 = (Button) findViewById(R.id.button1);
    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;
    }

Advantage: Einfache Tastenverwaltung, da alle Tastenabsichten in einer einzigen onClick()-Methode registriert sind


Für den zweiten Teil der Frage zum Übergeben von Daten siehe Wie übertrage ich Daten zwischen Aktivitäten in der Android-Anwendung?

48
Martin Sing

Wenn der Benutzer auf die Schaltfläche klickt, direkt in XML: 

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

Mit dem AttributAndroid:onClickwird der Methodenname angegeben, 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);
}
34
IntelliJ Amiya
Intent iinent= new Intent(Homeactivity.this,secondactivity.class);
startActivity(iinent);
17
vishal rangani
    Intent in = new Intent(getApplicationContext(),SecondaryScreen.class);    
    startActivity(in);

    This is an explicit intent to start secondscreen activity.
9
user1923551

Emmanuel, 

Ich denke, die zusätzlichen Informationen sollten vor Beginn der Aktivität eingegeben werden. Andernfalls sind die Daten noch nicht verfügbar, 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);
7
user1337489
Intent i = new Intent(firstactivity.this, secondactivity.class);
startActivity(i);
6
Mahtab

Versuchen Sie aus der sendenden Aktivitä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 aus 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"
6
Alex Irabor

Versuchen Sie diese einfache Methode.

startActivity(new Intent(MainActivity.this, SecondActivity.class));
4
joseph sarz

Sie können diesen Code ausprobieren:

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

Das Starten einer Aktivität aus einer anderen Aktivität ist in Android-Anwendungen sehr häufig.
Um eine Aktivität zu starten, benötigen Sie ein[Intent][1]Objekt.

Wie erstelle ich Absichtsobjekte?

Ein Absichtsobjekt nimmt in seinem Konstruktor two parameter an

  1. Kontext  
  2. Name der Aktivität die gestartet werden soll. 

Beispiel:

Wenn Sie beispielsweise zwei Aktivitäten haben, sagen Sie HomeActivity und DetailActivity, und Sie möchten DetailActivity von HomeActivity (HomeActivity -> DetailActivity) starten.  

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

HomeAktivität.

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);  
      }

});
3
Rohit Singh

Um neue Aktivitäten zu starten, können Sie eine Absicht senden, und 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 die Android-Entwicklerdokumente im Zusammenhang mit intents ; Es gibt eine Fülle von Informationen zu diesem Thema und es gibt auch Beispiele. 

3
Brian Driscoll

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 die Verwaltung zu erleichtern.

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

Starten Sie eine weitere Aktivität aus dieser Aktivität, und Sie können Parameter auch über Bündelobjekt ü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");
2
DroidNinja

Es wurden zwar bereits richtige Antworten bereitgestellt, aber ich bin hier, um die Antwort in der Sprache Kotlin zu suchen. Bei dieser Frage geht es nicht um sprachspezifische Aspekte, also füge ich den Code hinzu, um diese Aufgabe in Kotlin-Sprache auszuführen. 

So tun Sie dies in Kotlin für andorid 

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

 }
1
Abdul Rehman

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;
            }
1
user1918566

Wenn der Button angeklickt 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 von NextActivity.class zu erhalten:

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

Die einfachste Methode zum Öffnen einer Aktivität beim Klicken auf eine Schaltfläche 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 Funktion onclick 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 diesen Codeblock einfach dem vorhandenen hinzu.)

 </activity>
        <activity Android:name=".SecondActivity">
  </activity>
0
sn n

Nehmen Sie den Button zuerst 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.

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

Platzieren Sie das Schaltflächen-Widget in der folgenden XML-Datei

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

Danach initialisieren Sie und klicken Sie auf den Listener in Activity (siehe unten).

In Activity On Create-Methode:

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);
    }
});
0
prakash421

Schreiben Sie den Code in Ihre erste 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 der secondActivity.class

String name = getIntent().getStringExtra("Key");