In een Android-applicatie, hoe start u een nieuwe activiteit (GUI) wanneer een knop in een andere activiteit wordt geklikt en hoe geeft u gegevens uit tussen deze twee activiteiten?
Antwoord 1, Autoriteit 100%
eenvoudig.
Intent myIntent = new Intent(CurrentActivity.this, NextActivity.class);
myIntent.putExtra("key", value); //Optional parameters
CurrentActivity.this.startActivity(myIntent);
Extra’s worden aan de andere kant opgehaald via:
@Override
protected void onCreate(Bundle savedInstanceState) {
Intent intent = getIntent();
String value = intent.getStringExtra("key"); //if it's a string you stored.
}
Vergeet niet om uw nieuwe activiteit toe te voegen in de AndroidManifest.xml:
<activity android:label="@string/app_name" android:name="NextActivity"/>
Antwoord 2, Autoriteit 6%
Huidige reacties zijn geweldig, maar een uitgebreider antwoord is nodig voor beginners. Er zijn 3 verschillende manieren om een nieuwe activiteit in Android te starten en ze gebruiken allemaal de Intent
Class; Intent | Android-ontwikkelaars .
- met behulp van de
onclick
Attribuut van de knop. (Beginner) - Een
OnClickListener()
toewijzen via een anonieme klasse. (Gemiddeld) - Activiteit Wide Interface-methode met behulp van de
switch
Verklaring. (niet – “pro”)
Hier is de Link naar mijn voorbeeld als u wilt volgen:
- Met het kenmerk
onclick
van de knop. (Beginner)
Knoppen hebben een onclick
-attribuut dat te vinden is in het .xml-bestand:
<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);
}
Voordeel: gemakkelijk direct te maken, modulair en kan gemakkelijk meerdere onclick
s voor hetzelfde doel instellen.
Nadeel: Moeilijk leesbaar bij recensie.
- Een
OnClickListener()
toewijzen via een anonieme klas. (Gemiddeld)
Dit is wanneer u een afzonderlijke setOnClickListener()
instelt voor elke button
en elke onClick()
met zijn eigen bedoeling overschrijft.
p>
In 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);}
});
Voordeel: gemakkelijk direct te maken.
Nadeel: er zullen veel anonieme klassen zijn die de leesbaarheid bij het beoordelen bemoeilijken.
- Activiteitsbrede interfacemethode met behulp van de
switch
-instructie. (niet-“Pro”)
Dit is wanneer u een switch
-instructie gebruikt voor uw knoppen binnen de onClick()
-methode om alle knoppen van de activiteit te beheren.
In 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;
}
Voordeel: eenvoudig knopbeheer omdat alle knopintenties worden geregistreerd in een enkele onClick()
-methode
Voor het tweede deel van de vraag, het doorgeven van gegevens, zie Hoe geef ik gegevens door tussen activiteiten in de Android-app?
Bewerken: niet-“Pro”
Antwoord 3, autoriteit 5%
Maak een intentie voor een ViewPerson-activiteit en geef de PersonID door (bijvoorbeeld voor het opzoeken van een database).
Intent i = new Intent(getBaseContext(), ViewPerson.class);
i.putExtra("PersonID", personID);
startActivity(i);
Vervolgens kun je in ViewPerson Activity de bundel extra gegevens ophalen, ervoor zorgen dat deze niet null is (voor het geval je soms geen gegevens doorgeeft), en vervolgens de gegevens ophalen.
Bundle extras = getIntent().getExtras();
if(extras !=null)
{
personID = extras.getString("PersonID");
}
Als u nu gegevens tussen twee activiteiten moet delen, kunt u ook een Global Singleton hebben.
public class YourApplication extends Application
{
public SomeDataClass data = new SomeDataClass();
}
Noem het dan in een willekeurige activiteit aan door:
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
Antwoord 4, Autoriteit 3%
Wanneer de gebruiker op de knop klikt, direct in de XML zoals dat:
<Button
android:id="@+id/button"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="TextButton"
android:onClick="buttonClickFunction"/>
Gebruik van het kenmerk android:onClick
Wij verklaren de naam van de methode die aanwezig moet zijn op de ouderactiviteit. Dus ik moet deze methode in onze activiteit zoals dat maken:
public void buttonClickFunction(View v)
{
Intent intent = new Intent(getApplicationContext(), Your_Next_Activity.class);
startActivity(intent);
}
Antwoord 5, Autoriteit 2%
Intent iinent= new Intent(Homeactivity.this,secondactivity.class);
startActivity(iinent);
Antwoord 6
Intent in = new Intent(getApplicationContext(),SecondaryScreen.class);
startActivity(in);
This is an explicit intent to start secondscreen activity.
Antwoord 7
Emmanuel,
Ik denk dat de extra info moet worden geplaatst voordat de activiteit wordt gestart, anders zullen de gegevens nog niet beschikbaar zijn als u er toegang tot bezorgt in de oncreate-methode van afmetingen.
Intent myIntent = new Intent(CurrentActivity.this, NextActivity.class);
myIntent.putExtra("key", value);
CurrentActivity.this.startActivity(myIntent);
Antwoord 8
Probeer de volgende code van de verzendactiviteit
//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);
}
Probeer de volgende code van de ontvangende activiteit:
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);
Voeg vervolgens de volgende code toe aan het bestand AndroidManifest.xml
android:name="packagename.NameOfTheReceivingActivity"
android:label="Title of the Activity"
android:parentActivityName="packagename.NameOfSendingActivity"
Antwoord 9
Intent i = new Intent(firstactivity.this, secondactivity.class);
startActivity(i);
Antwoord 10
Probeer deze eenvoudige methode.
startActivity(new Intent(MainActivity.this, SecondActivity.class));
Antwoord 11
U kunt deze code proberen:
Intent myIntent = new Intent();
FirstActivity.this.SecondActivity(myIntent);
Antwoord 12
Kotlin
Eerste activiteit
startActivity(Intent(this, SecondActivity::class.java)
.putExtra("key", "value"))
Tweede activiteit
val value = getIntent().getStringExtra("key")
Suggestie
Steek sleutels altijd in een constant bestand voor een meer beheerde manier.
companion object {
val PUT_EXTRA_USER = "user"
}
startActivity(Intent(this, SecondActivity::class.java)
.putExtra(PUT_EXTRA_USER, "value"))
Antwoord 13
De manier om nieuwe activiteiten te starten is door een intentie uit te zenden, en er is een specifiek soort intentie die je kunt gebruiken om gegevens van de ene activiteit naar de andere door te geven. Mijn aanbeveling is dat je de Android-ontwikkelaarsdocumenten bekijkt met betrekking tot intents; het is een schat aan informatie over het onderwerp, en heeft ook voorbeelden.
Antwoord 14
Het starten van een activiteit vanuit een andere activiteit is een veelvoorkomend scenario bij Android-apps.
Om een activiteit te starten heb je een Intent-object nodig.
Hoe maak ik intentie-objecten aan?
Een intentie-object heeft tweeparameters nodig in zijn constructor
- Context
- Naam van de activiteitdie moet worden gestart. (of volledige pakketnaam)
Voorbeeld:
Dus als je bijvoorbeeld twee activiteiten hebt, zeg HomeActivity
en DetailActivity
en je wilt DetailActivity
starten vanuit HomeActivity
(HomeActivity–>DetailActivity).
Hier is het codefragment dat laat zien hoe u DetailActivity kunt starten vanaf
Thuisactiviteit.
Intent i = new Intent(HomeActivity.this,DetailActivity.class);
startActivity(i);
En je bent klaar.
Terugkomend op het gedeelte met klikken op de knop.
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);
}
});
Antwoord 15
Start een andere activiteit van deze activiteit en u kunt parameters via bundelobject ook passeren.
Intent intent = new Intent(getBaseContext(), YourActivity.class);
intent.putExtra("USER_NAME", "[email protected]");
startActivity(intent);
Gegevens ophalen in een andere activiteit (youractivity)
String s = getIntent().getStringExtra("USER_NAME");
Antwoord 16
// in kotlin , kunt u doen
/ * In de eerste activiteit, Let In Activity Layout Er is knop die ID als knop heeft.
Stel dat ik gegevens moet doorgeven als tekenreeksstype van de ene activiteit naar een ander * /
val btn = findViewById<Button>(R.id.button)
btn.setOnClickListener {
val intent = Intent(baseContext, SecondActivity::class.java).apply {
putExtra("KEY", data)
}
startActivity(intent)
}
// In de tweede activiteit kunt u gegevens ontvangen van een andere activiteit als
val name = intent.getStringExtra("KEY")
/ * Stel dat u een aangepast object moet passeren, dan moet het pakketbaar zijn.
Laat er klasse collagetype zijn die ik van de ene activiteit naar de andere moet gaan
* /
import android.os.Parcelable
import kotlinx.android.parcel.Parcelize
@Parcelize
class Collage(val name: String, val mobile: String, val email: String) : Parcelable
/ * -activiteit eerst, laat hier gegevens collagetype. die ik moet doorgeven aan een andere activiteit. * /
val btn = findViewById<Button>(R.id.button)
btn.setOnClickListener {
val intent = Intent(baseContext, SecondActivity::class.java).apply {
putExtra("KEY", data)
}
startActivity(intent)
}
// Dan van tweede activiteit zullen we als
val item = intent.extras?.getParcelable<Collage>("KEY")
Antwoord 17
Implementeer de interface van de weergave.onclickListener en negeer de 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;
}
Antwoord 18
Hoewel de juiste antwoorden al zijn gegeven, ben ik hier om het antwoord in de taal Kotlin te zoeken. Deze vraag gaat niet over taalspecifiek, dus ik voeg de code toe om deze taak in de Kotlin-taal te volbrengen.
Hier is hoe je dit doet in Kotlin voor andorid
testActivityBtn1.setOnClickListener{
val intent = Intent(applicationContext,MainActivity::class.java)
startActivity(intent)
}
Antwoord 19
De eenvoudigste manier om activiteit te openen bij het klikken op een knop is:
- Maak twee activiteiten onder de map res, voeg een knop toe aan de eerste activiteit en geef een naam aan de functie
onclick
. - Er moeten twee java-bestanden zijn voor elke activiteit.
- Hieronder staat de 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(Voeg dit codeblok gewoon toe aan het bestaande)
</activity>
<activity android:name=".SecondActivity">
</activity>
Antwoord 20
Neem Button eerst 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"
/>
Listner van knop maken.
pre.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent intent = new Intent(MainActivity.this, SecondActivity.class);
startActivity(intent);
}
});
Antwoord 21
Wanneer op de knop wordt geklikt:
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);
}
});
Om de extra gegevens van NextActivity.class
te ontvangen:
Bundle extra = getIntent().getExtras();
if (extra != null){
String str = (String) extra.get("data"); // get a object
}
Antwoord 22
Schrijf de code in je eerste activiteit.
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");
Antwoord 23
PLAY-knop widget in XML zoals hieronder
<Button
android:id="@+id/button"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Button"
/>
Na die initialisatie en handvat op klik Listener in activiteit zoals hieronder ..
In activiteit op het maken van 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);
}
});
Antwoord 24
Een oude vraag, maar als het doel is om van weergegeven pagina te wisselen, hoef ik maar één activiteit te doen en setContentView() aan te roepen als ik van pagina wil wisselen (meestal als reactie op het klikken van een gebruiker op een knop). Hierdoor kan ik eenvoudig van de ene pagina naar de andere bellen. Geen opzettelijke waanzin van extra’s pakketten bundels en wat dan ook proberen om gegevens heen en weer door te geven.
Ik maak zoals gewoonlijk een aantal pagina’s in res/lay-out, maar maak niet voor elk een activiteit. Gebruik gewoon setContentView() om ze naar behoefte te wisselen.
Dus mijn enige echte onCreate() heeft:
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
LayoutInflater layoutInflater = getLayoutInflater();
final View mainPage = layoutInflater.inflate(R.layout.activity_main, null);
setContentView (mainPage);
Button openMenuButton = findViewById(R.id.openMenuButton);
final View menuPage = layoutInflatter.inflate(R.layout.menu_page, null);
Button someMenuButton = menuPage.findViewById(R.id.someMenuButton);
openMenuButton.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
setContentView(menuPage);
}
});
someMenuButton.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
do-something-interesting;
setContentView(mainPage);
}
}
}
Als u wilt dat de knop Terug door uw interne pagina’s gaat voordat u de app afsluit, wikkel dan setContentView() om pagina’s op te slaan in een kleine stapel pagina’s en plaats die pagina’s in de onBackPressed()-handler.
Antwoord 25
uw knop xml:
<Button
android:id="@+id/btn"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="jump to activity b"
/>
Hoofdactiviteit.java:
Button btn=findViewVyId(R.id.btn);
btn.setOnClickListener(btnclick);
btnclick.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent intent=new Intent();
intent.setClass(Mainactivity.this,b.class);
startActivity(intent);
}
});
Antwoord 26
imageView.setOnClickListener(v -> {
// your code here
});