Cómo iniciar una nueva actividad al hacer clic en el botón
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?
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"/>
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 Intent
clase; Intención | Desarrolladores de Android .
- Usando el
onClick
atributo del Botón. (Principiante) - Asignar
OnClickListener()
a través de una clase anónima. (Intermedio) - Método de interfaz de toda la actividad que utiliza la
switch
declaración. (no-"Pro")
Aquí está el enlace a mi ejemplo si quieres seguirlo:
- Usando el
onClick
atributo del Botón. (Principiante)
Los botones tienen un onClick
atributo 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 onClick
mensajes con el mismo propósito.
Desventaja : Difícil legibilidad al revisar.
- Asignar
OnClickListener()
a través de una clase anónima. (Intermedio)
Esto es cuando estableces un separado setOnClickListener()
para cada uno button
y 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.
- Método de interfaz de toda la actividad que utiliza la
switch
declaración. (no-"Pro")
Esto es cuando usa una switch
declaració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"
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
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:onClick
declaramos 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);
}
Intent iinent= new Intent(Homeactivity.this,secondactivity.class);
startActivity(iinent);