Come iniziare una nuova attività facendo clic sul pulsante


Risposte:


1117

Facile.

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

Gli extra vengono recuperati dall'altra parte tramite:

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

Non dimenticare di aggiungere la tua nuova attività in AndroidManifest.xml:

<activity android:label="@string/app_name" android:name="NextActivity"/>

18
Dov'è la parte clic del pulsante? (clic sul pulsante → passaggio all'attività successiva)
Jonny,

4
@Jonny: ecco un esempio di clic su un pulsante. stackoverflow.com/a/7722428/442512
Emmanuel

8
C'è qualche differenza tra CurrentActivity.this.startActivity(myIntent)e startActivity(myIntent)?
Confondere il

5
Sì, facile lol. C'è più codemissing del codice effettivamente digitato. Dove mancano tutta l'interfaccia xml e il codice .java? Downvote
Liquid Core,

111
Liquido, vorresti che lo mettesse anche in un apk? ;)
Casey Murray

60

Creare un intento per un'attività ViewPerson e passare il PersonID (ad esempio per una ricerca nel database).

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

Quindi in Attività ViewPerson, puoi ottenere il pacchetto di dati extra, assicurarti che non sia nullo (nel caso in cui a volte non passi i dati), quindi ottieni i dati.

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

Ora, se hai bisogno di condividere dati tra due attività, puoi anche avere un Singleton globale.

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

Quindi chiamalo in qualsiasi attività:

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

58

Le risposte attuali sono ottime, ma è necessaria una risposta più completa per i principianti. Esistono 3 modi diversi per iniziare una nuova attività in Android e tutti usano la Intentclasse; Intento | Sviluppatori Android .

  1. Utilizzando l' onClickattributo del pulsante. (Principiante)
  2. Assegnare un OnClickListener()tramite una classe anonima. (Intermedio)
  3. Metodo dell'interfaccia a livello di attività utilizzando l' switchistruzione. (Pro)

Ecco il link al mio esempio se vuoi seguire:

1. Utilizzando l' onClickattributo del pulsante. (Principiante)

I pulsanti hanno un onClickattributo che si trova nel file .xml:

<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" />

Nella classe Java:

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

Vantaggio : facile da realizzare al volo, modulare e può facilmente impostare più onClicks allo stesso scopo.

Svantaggio : difficoltà di lettura durante la revisione.

2. Assegnare un OnClickListener()tramite una classe anonima. (Intermedio)

Questo è quando si imposta un separato setOnClickListener()per ciascuno buttone sovrascrive ciascuno onClick()con il suo intento.

Nella classe Java:

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

Vantaggio : facile da realizzare al volo.

Svantaggio : ci saranno molte classi anonime che renderanno difficile la leggibilità durante la revisione.

3. Metodo dell'interfaccia a livello di attività utilizzando l' switchistruzione. (Pro)

Questo è quando si utilizza switchun'istruzione per i pulsanti all'interno del onClick()metodo per gestire tutti i pulsanti dell'attività.

Nella classe Java:

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

Vantaggio : facile gestione dei pulsanti perché tutti gli intenti dei pulsanti sono registrati in un unico onClick()metodo


Per la seconda parte della domanda, passando i dati, vedere Come passare i dati tra le attività nell'applicazione Android?


Risposta eccellente, grazie! conosci qualche penalità prestazionale usando uno dei suggerimenti?
lmedinas,

3
# 3 non è "pro". È l'opzione meno leggibile e gestibile e verrà refactored in # 1 o # 2 dal primo sviluppatore esperto che lo vede. (O useranno Butterknife, che è l'opzione # 1 sugli steroidi.)
Kevin Krumwiede

Penso che ai programmatori professionisti non piaccia affatto # 3. mettere, Idk, gestore di clic a 10 pulsanti all'interno di 1 metodo è un incubo e non è affatto professionale. il metodo con linee di codice zilion non ti rende professionale. BACIO .
Mehdi Dehghani,

3 non è sicuramente "pro"
Kaiser Keister il

36

Quando l'utente fa clic sul pulsante, direttamente all'interno dell'XML in questo modo:

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

Usando l'attributo android:onClickdichiariamo il nome del metodo che deve essere presente sull'attività principale. Quindi devo creare questo metodo all'interno della nostra attività in questo modo:

public void buttonClickFunction(View v)
{
            Intent intent = new Intent(getApplicationContext(), Your_Next_Activity.class);
            startActivity(intent);
}

19
Intent iinent= new Intent(Homeactivity.this,secondactivity.class);
startActivity(iinent);

2
questa è solo una risposta parziale. inoltre non è sufficiente, ovvero non funzionerà senza ulteriori modifiche al progetto.
andr

10
    Intent in = new Intent(getApplicationContext(),SecondaryScreen.class);    
    startActivity(in);

    This is an explicit intent to start secondscreen activity.

8

Emmanuele,

Penso che le informazioni extra dovrebbero essere messe prima di iniziare l'attività, altrimenti i dati non saranno ancora disponibili se si accede ad essa nel metodo onCreate di NextActivity.

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

myIntent.putExtra("key", value);

CurrentActivity.this.startActivity(myIntent);

7

Dall'attività di invio provare il seguente codice

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

            }

Dall'attività di ricezione provare il seguente codice:

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

Quindi aggiungi il seguente codice al file AndroidManifest.xml

  android:name="packagename.NameOfTheReceivingActivity"
  android:label="Title of the Activity"
  android:parentActivityName="packagename.NameOfSendingActivity"

7
Intent i = new Intent(firstactivity.this, secondactivity.class);
startActivity(i);

7

Prova questo semplice metodo.

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

5

Puoi provare questo codice:

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

4

Il modo per iniziare nuove attività è trasmettere un intento e esiste un tipo specifico di intento che è possibile utilizzare per passare i dati da un'attività a un'altra. La mia raccomandazione è di consultare i documenti per sviluppatori Android relativi alle intenzioni ; è una ricchezza di informazioni sull'argomento e ha anche degli esempi.


4

Kotlin

Prima attività

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

Seconda attività

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

Suggerimento

Metti sempre le chiavi in ​​un file costante per un modo più gestito.

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

4

L'avvio di un'attività da un'altra attività è uno scenario molto comune tra le applicazioni Android.
Per iniziare un'attività è necessario un oggetto Intent .

Come creare Intent Objects?

Un oggetto intent accetta due parametri nel suo costruttore

  1. Contesto
  2. Nome dell'attività da avviare. (o nome completo del pacchetto)

Esempio:

inserisci qui la descrizione dell'immagine

Ad esempio, se hai due attività, dì HomeActivitye DetailActivitye vuoi iniziare DetailActivityda HomeActivity (HomeActivity -> DetailActivity).

Ecco lo snippet di codice che mostra come avviare DetailActivity da

HomeActivity.

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

E il gioco è fatto.

Tornando alla parte clic del pulsante.

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

Inizia un'altra attività da questa attività e puoi passare parametri anche tramite Bundle Object.

Intent intent = new Intent(getBaseContext(), YourActivity.class);
intent.putExtra("USER_NAME", "xyz@gmail.com");
startActivity(intent);

Recuperare i dati in un'altra attività (YourActivity)

String s = getIntent().getStringExtra("USER_NAME");

2

Implementare l'interfaccia View.OnClickListener e sovrascrivere il metodo onClick.

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

2

Sebbene siano già state fornite risposte adeguate, sono qui per cercare la risposta in lingua Kotlin. Questa domanda non riguarda il linguaggio specifico, quindi sto aggiungendo il codice per eseguire questa attività nel linguaggio Kotlin.

Ecco come si fa in Kotlin per Andorid

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

 }

2

Il modo più semplice per aprire l'attività al clic del pulsante è:

  1. Creare due attività nella cartella res, aggiungere un pulsante alla prima attività e assegnare un nome alla onclickfunzione.
  2. Dovrebbero esserci due file Java per ogni attività.
  3. Di seguito è riportato il codice:

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 (basta aggiungere questo blocco di codice all'esistente)

 </activity>
        <activity android:name=".SecondActivity">
  </activity>

1

Prendi prima 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"
        />

Fai listener del pulsante.

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

1

Quando si fa clic sul pulsante:

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

Per ricevere i dati extra da NextActivity.class:

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

1

Scrivi il codice nella tua prima attività.

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

1

Posiziona il widget del pulsante in XML come di seguito

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

Dopo l'inizializzazione e la gestione dei clic sull'ascoltatore in Attività come sotto.

Nel metodo Attività su Crea:

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);
    }
});
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.