Cómo comenzar una nueva actividad al hacer clic en el botón

Respuestas:

1117

Fácil.

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

Los extras se recuperan en el otro lado a través de:

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

No olvide agregar su nueva actividad en AndroidManifest.xml:

<activity android:label="@string/app_name" android:name="NextActivity"/>
Emmanuel
fuente
18
¿Dónde está la parte de clic del botón? (clic de botón → transición a la siguiente actividad)
Jonny
44
@ Jonny: Aquí hay un ejemplo de un clic de botón. stackoverflow.com/a/7722428/442512
Emmanuel el
8
¿Hay alguna diferencia entre CurrentActivity.this.startActivity(myIntent)y startActivity(myIntent)?
Confundir
55
Sí, fácil jajaja. Hay más codemising que el código realmente escrito. ¿Dónde falta toda la interfaz xml y el código .java? Voto a favor
Núcleo líquido
111
Liquid, ¿te gustaría que lo incluyera en un apk también? ;)
Casey Murray
60

Cree una intención para una actividad ViewPerson y pase el PersonID (para una búsqueda en la base de datos, por ejemplo).

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

Luego, en ViewPerson Activity, puede obtener el paquete de datos adicionales, asegúrese de que no sea nulo (en caso de que a veces no pase datos), luego obtenga los datos.

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

Ahora, si necesita compartir datos entre dos actividades, también puede tener un Singleton global.

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

Luego llámalo en cualquier actividad:

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
Bryan Denny
fuente
58

Las respuestas actuales son excelentes, pero se necesita una respuesta más integral para los principiantes. Hay 3 formas diferentes de comenzar una nueva actividad en Android, y todas usan la Intentclase; Intención | Desarrolladores de Android .

  1. Usando el onClickatributo del Botón. (Principiante)
  2. Asignación de una OnClickListener()vía a través de una clase anónima. (Intermedio)
  3. Método de interfaz de toda la actividad utilizando la switchdeclaración. (Pro)

Aquí está el enlace a mi ejemplo si quieres seguirlo:

1. Usando el onClickatributo del Botón. (Principiante)

Los botones tienen un onClickatributo que se encuentra dentro del archivo .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" />

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

Ventaja : Fácil de hacer sobre la marcha, modular, y puede configurar fácilmente varios correos onClickelectrónicos con la misma intención.

Desventaja : difícil legibilidad al revisar.

2. Asignación de un OnClickListener() vía a través de una clase anónima. (Intermedio)

Esto es cuando establece un separado setOnClickListener()para cada uno buttony anula cadaonClick() con su propia intención.

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

Ventaja : fácil de hacer sobre la marcha.

Desventaja : Habrá muchas clases anónimas que dificultarán la legibilidad al revisar.

3. Método de interfaz de toda la actividad utilizando el switch declaración. (Pro)

Esto es cuando usa una switchdeclaración para sus botones dentro delonClick() método para administrar todos los botones de la Actividad.

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

Ventaja : administración fácil de botones porque todos los intentos de botón se registran en un solo onClick()método


Para la segunda parte de la pregunta, pasar datos, consulte ¿Cómo paso datos entre actividades en la aplicación de Android?

Martin Sing
fuente
Excelente respuesta, gracias! ¿Conoces alguna penalización de rendimiento al usar alguna de las sugerencias?
lmedinas
3
# 3 no es "profesional". Es la opción menos legible y fácil de mantener, y el primer desarrollador experimentado que lo vea refactorizará en el n. ° 1 o n. ° 2. (O usarán Butterknife, que es la opción n. ° 1 con esteroides.)
Kevin Krumwiede
Creo que a los programadores profesionales no les gusta el # 3. poner, Idk, controlador de clic de 10 botones dentro de 1 método es una pesadilla y no es profesional en absoluto. El método con líneas de código zilion no te hace profesional. BESO .
Mehdi Dehghani
3 definitivamente no es "profesional"
Kaiser Keister
36

Cuando el usuario hace clic en el botón, directamente dentro del XML así:

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

Usando el atributo android:onClickdeclaramos el nombre del método que debe estar presente en la actividad principal. Así que tengo que crear este método dentro de nuestra actividad así:

public void buttonClickFunction(View v)
{
            Intent intent = new Intent(getApplicationContext(), Your_Next_Activity.class);
            startActivity(intent);
}
IntelliJ Amiya
fuente
19
Intent iinent= new Intent(Homeactivity.this,secondactivity.class);
startActivity(iinent);
vishal rangani
fuente
2
Esta es solo una respuesta parcial. además, no es suficiente, es decir, no funcionará sin modificaciones adicionales en el proyecto.
andr
10
    Intent in = new Intent(getApplicationContext(),SecondaryScreen.class);    
    startActivity(in);

    This is an explicit intent to start secondscreen activity.
usuario1923551
fuente
8

Emmanuel

Creo que la información adicional debe colocarse antes de comenzar la actividad; de lo contrario, los datos aún no estarán disponibles si está accediendo a ella en el método onCreate de NextActivity.

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

myIntent.putExtra("key", value);

CurrentActivity.this.startActivity(myIntent);
usuario1337489
fuente
7

Desde la actividad de envío, intente el siguiente código

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

            }

Desde la actividad receptora intente el siguiente código:

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

Luego solo agregue el siguiente código al archivo AndroidManifest.xml

  android:name="packagename.NameOfTheReceivingActivity"
  android:label="Title of the Activity"
  android:parentActivityName="packagename.NameOfSendingActivity"
Alex Irabor
fuente
7
Intent i = new Intent(firstactivity.this, secondactivity.class);
startActivity(i);
Mahtab
fuente
7

Prueba este método simple.

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

Puedes probar este código:

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

La manera de comenzar nuevas actividades es difundir una intención, y hay un tipo específico de intención que puede usar para pasar datos de una actividad a otra. Mi recomendación es que revises los documentos de desarrollador de Android relacionados con las intenciones ; Es una gran cantidad de información sobre el tema, y ​​también tiene ejemplos.

Brian Driscoll
fuente
4

Kotlin

Primera actividad

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

Segunda actividad

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

Sugerencia

Siempre coloque las claves en un archivo constante para una forma más administrada.

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

Iniciar una actividad desde otra actividad es un escenario muy común entre las aplicaciones de Android.
Para comenzar una actividad, necesita un objeto Intent .

¿Cómo crear objetos de intención?

Un objeto de intención toma dos parámetros en su constructor

  1. Contexto
  2. Nombre de la actividad que se iniciará. (o nombre completo del paquete)

Ejemplo:

ingrese la descripción de la imagen aquí

Entonces, por ejemplo, si tiene dos actividades, diga HomeActivityy DetailActivityy quiera comenzar DetailActivitydesde HomeActivity (HomeActivity -> DetailActivity).

Aquí está el fragmento de código que muestra cómo iniciar DetailActivity desde

InicioActividad.

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

Y ya terminaste.

Volviendo a la parte de clic del botón.

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

});
Rohit Singh
fuente
3

Inicie otra actividad desde esta actividad y también puede pasar parámetros a través del Objeto de paquete.

Intent intent = new Intent(getBaseContext(), YourActivity.class);
intent.putExtra("USER_NAME", "[email protected]");
startActivity(intent);

Recuperar datos en otra actividad (YourActivity)

String s = getIntent().getStringExtra("USER_NAME");
DroidNinja
fuente
2

Implemente la interfaz View.OnClickListener y anule el método 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;
            }
usuario1918566
fuente
2

Aunque ya se han proporcionado las respuestas adecuadas, estoy aquí para buscar la respuesta en el idioma Kotlin. Esta pregunta no se refiere al idioma específico, por lo que agrego el código para realizar esta tarea en el idioma Kotlin.

Así es como se hace esto en Kotlin para andorid

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

 }
Abdul Rehman
fuente
2

La forma más sencilla de abrir actividad al hacer clic en el botón es:

  1. Cree dos actividades en la carpeta res, agregue un botón a la primera actividad y asigne un nombre a la onclickfunción.
  2. Debe haber dos archivos java para cada actividad.
  3. Debajo está el código:

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 (solo agregue este bloque de código al existente)

 </activity>
        <activity android:name=".SecondActivity">
  </activity>
sn n
fuente
1

Tome el botón en xml primero.

  <Button
        android:id="@+id/pre"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:background="@mipmap/ic_launcher"
        android:text="Your Text"
        />

Hacer lista de botón.

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

Cuando se hace clic en el botón:

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

Para recibir los datos adicionales de NextActivity.class:

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

Escribe el código en tu primera actividad.

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

En secondActivity.class

String name = getIntent().getStringExtra("Key");
Gyan Swaroop Awasthi
fuente
1

Coloque el widget de botón en xml como a continuación

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

Después de eso, inicialice y maneje el oyente de clics en la Actividad como a continuación.

En Actividad en Crear método:

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