Hoe u nieuwe activiteit op knop kunt starten, klikt u op

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 IntentClass; Intent | Android-ontwikkelaars .

  1. met behulp van de onclickAttribuut van de knop. (Beginner)
  2. Een OnClickListener()toewijzen via een anonieme klasse. (Gemiddeld)
  3. Activiteit Wide Interface-methode met behulp van de switchVerklaring. (niet – “pro”)

Hier is de Link naar mijn voorbeeld als u wilt volgen:

  1. Met het kenmerk onclickvan 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 onclicks voor hetzelfde doel instellen.

Nadeel: Moeilijk leesbaar bij recensie.

  1. Een OnClickListener()toewijzen via een anonieme klas. (Gemiddeld)

Dit is wanneer u een afzonderlijke setOnClickListener()instelt voor elke buttonen 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.

  1. 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:onClickWij 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

  1. Context
  2. Naam van de activiteitdie moet worden gestart. (of volledige pakketnaam)

Voorbeeld:

Dus als je bijvoorbeeld twee activiteiten hebt, zeg HomeActivityen DetailActivityen je wilt DetailActivitystarten 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:

  1. Maak twee activiteiten onder de map res, voeg een knop toe aan de eerste activiteit en geef een naam aan de functie onclick.
  2. Er moeten twee java-bestanden zijn voor elke activiteit.
  3. 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.classte 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
        });

Other episodes