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

Resuelto Adham asked hace 54 años • 28 respuestas

En una aplicación de Android, ¿cómo se inicia una nueva actividad (GUI) cuando se hace clic en un botón de otra actividad y cómo se pasan datos entre estas dos actividades?

Adham avatar Jan 01 '70 08:01 Adham
Aceptado

Fácil.

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

Los extras se recuperan del 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 olvides agregar tu nueva actividad en AndroidManifest.xml:

<activity android:label="@string/app_name" android:name="NextActivity"/>
Emmanuel avatar Nov 15 '2010 15:11 Emmanuel

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

  1. Usando el onClickatributo del Botón. (Principiante)
  2. Asignar OnClickListener()a través de una clase anónima. (Intermedio)
  3. Método de interfaz de toda la actividad que utiliza la switchdeclaración. (no-"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 crear sobre la marcha, modular y puede configurar fácilmente varios onClickmensajes con el mismo propósito.

Desventaja : Difícil legibilidad al revisar.

  1. Asignar OnClickListener()a través de una clase anónima. (Intermedio)

Esto es cuando estableces un separado setOnClickListener()para cada uno buttony anulas cada uno onClick()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, lo que dificultará la legibilidad al revisar.

  1. Método de interfaz de toda la actividad que utiliza la switchdeclaración. (no-"Pro")

Esto es cuando usa una switchdeclaración para sus botones dentro del onClick()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 : Gestión sencilla de los botones porque todas las intenciones de los botones se registran en un único 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?

Editar: no-"Pro"

Martin Sing avatar Dec 30 '2016 02:12 Martin Sing

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

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

Luego, en Actividad de ViewPerson, puede obtener el paquete de datos adicionales, asegurarse de que no sea nulo (en caso de que a veces no pase datos) y luego obtener 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 Global Singleton.

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

Luego llámalo en cualquier actividad por:

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 avatar Nov 15 '2010 16:11 Bryan Denny

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. Entonces 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 avatar Jul 29 '2015 12:07 IntelliJ Amiya
Intent iinent= new Intent(Homeactivity.this,secondactivity.class);
startActivity(iinent);
vishal rangani avatar Feb 11 '2013 10:02 vishal rangani