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?
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"/>
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
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 .
onClick
-Attributs der Schaltfläche. (Anfänger)OnClickListener()
über eine anonyme Klasse. (Mittlere) switch
verwendet. (Profi)Hier ist der Link zu meinem Beispiel, wenn Sie folgen möchten: https://github.com/martinsing/ToNewActivityButtons
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 onClick
s auf dieselbe Absicht einstellen.
Nachteil: Schwierige Lesbarkeit bei der Überprüfung.
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.
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?
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:onClick
wird 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);
}
Intent iinent= new Intent(Homeactivity.this,secondactivity.class);
startActivity(iinent);
Intent in = new Intent(getApplicationContext(),SecondaryScreen.class);
startActivity(in);
This is an explicit intent to start secondscreen activity.
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);
Intent i = new Intent(firstactivity.this, secondactivity.class);
startActivity(i);
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"
Versuchen Sie diese einfache Methode.
startActivity(new Intent(MainActivity.this, SecondActivity.class));
Sie können diesen Code ausprobieren:
Intent myIntent = new Intent();
FirstActivity.this.SecondActivity(myIntent);
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.
Ein Absichtsobjekt nimmt in seinem Konstruktor two parameter an
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);
}
});
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.
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"))
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");
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)
}
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;
}
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
}
Die einfachste Methode zum Öffnen einer Aktivität beim Klicken auf eine Schaltfläche ist:
onclick
einen Namen.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>
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);
}
});
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);
}
});
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");