Cómo abrir una segunda actividad al hacer clic en el botón en la aplicación de Android

96

Estoy aprendiendo a crear aplicaciones para Android y necesito ayuda específica. Parece que no puedo entender qué bits de código de plantilla debo cambiar y qué bits son estáticos.

En la carpeta DISEÑO tengo mi ACTIVITY_MAIN.XML que dice

 <?xml version="1.0" encoding="utf-8"?>
 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
 xmlns:tools="http://schemas.android.com/tools"
 android:layout_width="match_parent"
 android:layout_height="match_parent"
 android:orientation="horizontal">

 <Button
    android:id="@+id/button1"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:text="@string/main_buttons_photos" />

 </LinearLayout>

A continuación, tengo mi segunda actividad ACTIVITY_SEND_PHOTOS.XML que es

 <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
 xmlns:tools="http://schemas.android.com/tools"
 android:layout_width="match_parent"
 android:layout_height="match_parent" >

 <TextView
    android:id="@+id/textView2"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_centerHorizontal="true"
    android:layout_centerVertical="true"
    android:text="@string/hello_world"
    tools:context=".SendPhotos" />

 <TextView
    android:id="@+id/textView1"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_alignParentLeft="true"
    android:layout_alignParentTop="true"
    android:text="@string/title_activity_send_photos"
    android:textAppearance="?android:attr/textAppearanceLarge" />

 </RelativeLayout>

Luego tengo mi MainActivity.java (¿es este el .class?) Este lee el paquete com.example.assent.bc;

 import android.os.Bundle;
 import android.app.Activity;
 import android.view.Menu;
 import android.view.View;

 public class MainActivity extends Activity {

 @Override
 public void onCreate(Bundle savedInstanceState) {
     super.onCreate(savedInstanceState);
     setContentView(R.layout.activity_main);
 }

 @Override
 public boolean onCreateOptionsMenu(Menu menu) {
     getMenuInflater().inflate(R.menu.activity_main, menu);
     return true;
 }
 /** Called when the user clicks the Send button */
 public void sendMessage(View view) {
     // Do something in response to button
 }
 }

y luego mi archivo SendPhotos.java que es;

 package com.example.assent.bc;

 import android.os.Bundle;
 import android.app.Activity;
 import android.view.Menu;
 import android.view.MenuItem;
 import android.support.v4.app.NavUtils;

 public class SendPhotos extends Activity {

 @Override
 public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_send_photos);
    getActionBar().setDisplayHomeAsUpEnabled(true);
 }

 @Override
 public boolean onCreateOptionsMenu(Menu menu) {
    getMenuInflater().inflate(R.menu.activity_send_photos, menu);
    return true;
 }


 @Override
 public boolean onOptionsItemSelected(MenuItem item) {
    switch (item.getItemId()) {
        case android.R.id.home:
            NavUtils.navigateUpFromSameTask(this);
            return true;
    }
    return super.onOptionsItemSelected(item);
 }

 }

Me gustaría que el botón de mi actividad principal se vincule a mi actividad de enviar fotos, simplemente abriendo esa actividad, nada lujoso, sin enviar ningún dato ni nada.

Sé que en algún lugar necesito mi

 Intent i = new Intent(FromActivity.this, ToActivity.class);
 startActivity(i);

pero no tengo idea de con qué reemplazar ToActivity.class o qué más necesito dónde.

Henry Aspden
fuente
1
ToActivity.class es su nombre de actividad secundaria
Niranj Patel
Esta puede ser la mejor fuente para ti
Usama Sadiq
La clase de intención no tiene ningún constructor que acepte dos clases como argumento. ¿Qué tengo que hacer?
Emad Aghayi

Respuestas:

155

Puede pasar a la actividad deseada haciendo clic en el botón. solo agrega esta línea.

android:onClick="sendMessage"

xml:

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

En su actividad principal simplemente agregue este método:

public void sendMessage(View view) {
    Intent intent = new Intent(FromActivity.this, ToActivity.class);
    startActivity(intent);
}

Y lo más importante: no olvides definir tu actividad en manifest.xml

 <activity>
      android:name=".ToActivity"
      android:label="@string/app_name">          
 </activity>
Juned
fuente
3
Debe agregar >la etiqueta de actividad
Mageek
2
Esto no me está funcionando. Los View, Intenty los nombres de las actividades están en rojo. ¿Necesito importar algo para View?
Srujan Barai
1
@SrujanBarai sí, ambos importan android.view.View; e importar android.content.Intent; debe ser importado
William Reed
Funcionó bien para mí. Sin embargo, ¿no necesita un setOnClickListener () en su botón?
Evaggelos Manousakis
1
@VaggelisManousakis no, no es necesario porque ya está ahí en XMLandroid:onClick="sendMessage"
Juned
30

Prueba esto

  Button button;

public void onCreate(Bundle savedInstanceState) {
     super.onCreate(savedInstanceState);
     setContentView(R.layout.activity_main);

button=(Button)findViewById(R.id.button1);
        button.setOnClickListener(new View.OnClickListener() {

                    @Override
                    public void onClick(View v) {
                        // TODO Auto-generated method stub
                        Intent i = new Intent(getApplicationContext(),SendPhotos.class);
                        startActivity(i);
                    }
                });

 }
JD
fuente
¿pero donde? Recibo errores por todas partes Si intento colocar esto dentro del .java en eclipse
Henry Aspden
@HenryAspden importa onclocklistener y Button.
JD
@HenryAspden puso este código después de onCreate y después de encontrar su identificación.
JD
@HenryAspden, he editado mi código, ahora prueba esto. He puesto este código en onCreate, intente de esta manera.
JD
11

De Actividad: ¿dónde estás actualmente?

A la actividad: ¿a dónde quieres ir?

Intent i = new Intent( MainActivity.this, SendPhotos.class); startActivity(i);

Ambas actividades deben incluirse en el archivo de manifiesto, de lo contrario, no encontrará el archivo de clase y arrojará Force close.

Edite su Mainactivity.java

crate button's object;

ahora Escriba el código para el evento de clic.

        Button btn = (button)findViewById(R.id.button1);
         btn.LoginButton.setOnClickListener(new View.OnClickListener() 
       {

                @Override
                public void onClick(View v) 
                {
                 //put your intent code here
                }
   });

Espero que funcione para ti.

Chintan Khetiya
fuente
¿Va esto dentro del diseño o del .java?
Henry Aspden
ok, puede poner este código en el evento de clic del botón en el archivo principal activity.java
Chintan Khetiya
11
Button btn = (Button) findViewById(R.id.button1);

btn.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View v) {
        Intent myIntent = new Intent(MainActivity.this, MainActivity2.class);
        MainActivity.this.startActivity(myIntent);       
    }  
});

La respuesta para el novato completo de un novato completo: MainActivityes el nombre de la primera actividad. MainActivity2es el nombre de la segunda actividad. button1es el ID del botón en xml para MainActivityActivity.

iAmNotVeryGoodAtThis
fuente
1
sólo para ayudar a otros ... por "nombre del botón" ¿se refiere a la identificación?
Henry Aspden
En efecto . Corregido para reflejar su recomendación
iAmNotVeryGoodAtThis
5

solo sigue este paso (no estoy escribiendo código solo porque puedes copiar y pegar y no puedes aprender).

  1. En primer lugar, debe declarar un botón que tiene en el diseño

  2. Haga referencia a ese botón encontrando su id (usando findviewById) en oncreate

  3. setlistener para el botón (como setonclick oyente)

  4. manejar por última vez el evento de clic (significa comenzar una nueva actividad usando la intención como ya sabe)

  5. No olvide agregar actividad en el archivo de manifiesto

Por cierto, esto es simple, me gustaría sugerirle que comenzar con tutoriales simples disponibles en la red será mejor para usted.

Mucha suerte para Android

Kalpesh Lakhani
fuente
3

Reemplace el siguiente código de línea:

import android.view.View.OnClickListener;
public class MainActivity extends Activity implements OnClickListener{
   Button button;
    @Override
     public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        button=(Button)findViewById(R.id.button1);
        button.setOnClickListener(this);
      }
       public void onClick(View v) {
        if(v.getId==R.id.button1){
      Intent i = new Intent(FromActivity.this, ToActivity.class);
               startActivity(i);
            }
        }
     }

Agregue las siguientes líneas en su archivo de manifiesto:

   <activity android:name="com.packagename.FromActivity"></activity>
   <activity android:name="com.packagename.ToActivity"></activity>
Avadhani Y
fuente
3

Reemplace su MainActivity.class con este código

public class MainActivity extends Activity {

Button b1;
@Override
public void onCreate(Bundle savedInstanceState) {
 super.onCreate(savedInstanceState);
 setContentView(R.layout.activity_main);
 b1=(Button)findViewById(R.id.button1);
 b1.setOnClickListener(new View.onClickListener()
 {
  public void onClick(View v)
   {
       Intent i=new Intent(getApplicationContext(),SendPhotos.class);
       startActivity(i);
    }
 }
 )
}

Agregue estos códigos en su antes y AndroidManifest.xmldespués</activity></application>

<activity android:name=".SendPhotos"></activity>
Vikalp Patel
fuente
2

Esto siempre funciona, cualquiera de los dos debería estar bien:

@Override
public void onCreate(Bundle savedInstanceState) {

    super.onCreate(savedInstanceState);

    setContentView(R.layout.activity_main);

    Button btn = (Button) findViewById(R.id.button1);
    btn.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick (View v) {
            startActivity(new Intent("com.tobidae.Activity1"));
        }
        //** OR you can just use the one down here instead, both work either way
        @Override
        public void onClick (View v){
            Intent i = new Intent(getApplicationContext(), ChemistryActivity.class);
            startActivity(i);
        }
    }
}
Tobi Akerele
fuente
2

agregue el siguiente código al archivo activity_main.xml:

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

y simplemente agregue el siguiente método al archivo MainActivity.java:

public void buttonClick(View view){
  Intent i = new Intent(getApplicationContext()SendPhotos.class);
  startActivity(i);
}
Md Nakibul Hassan
fuente
Tiene un error tipográfico, un signo de interrogación antes del nombre del archivo
Mathieu VIALES
Perdón por el error
Md Nakibul Hassan
1

Si tiene dos botones y tiene la misma llamada de identificación a su botón, haga clic en eventos como este:

Button btn1;
Button btn2;
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    btn1= (Button)findViewById(R.id.button1);

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

    btn2=(Button) findViewById(R.id.button1);//Have same id call previous button---> button1

    btn2.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {

        }
    });

Cuando hizo clic button1, button2funcionará y no podrá abrir su segunda actividad.

Serdar Günaydın
fuente
1
 <Button
            android:id="@+id/btnSignIn"
            android:layout_width="250dp"
            android:layout_height="40dp"
            android:layout_marginEnd="8dp"
            android:layout_marginLeft="8dp"
            android:layout_marginRight="8dp"
            android:layout_marginStart="8dp"
            android:layout_marginTop="16dp"
            android:background="@drawable/circal"
            android:text="Sign in"
            android:textColor="@color/white"
            app:layout_constraintLeft_toLeftOf="parent"
            app:layout_constraintRight_toRightOf="parent"
            app:layout_constraintTop_toBottomOf="@+id/etPasswordLogin" />

EN CÓDIGO JAVA

Button signIn= (Button) findViewById(R.id.btnSignIn);

signIn.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                startActivity(new Intent(SignInPage.this,MainActivity.class));
            }
        });

}

Rana Umerfarooq
fuente
1

Puede pasar a la actividad deseada haciendo clic en el botón. simplemente agregue
android: onClick = "timerApp" esta línea.

xml:

 <Button
        android:id="@+id/timer_app"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:onClick="timerApp"
        android:text="Click To run Timer Activity" />

En su actividad principal simplemente agregue este método:

 public void timerApp(View view){
        Intent intent= new Intent(MainActivity.this,TimerActivity.class);
        startActivity(intent);
    }

O en el método onCreate () agregue el siguiente código

Button btn =findViewById(R.id.timer_app);//Don't need to type casting in android studio 3

btn.setOnClickListener(new View.OnClickListener() {
    public void onClick(View v) {
        Intent intent = new Intent(MainActivity.this, TimerActivity.class);
        startActivity(intent);       
    }  
});
Sani Kamal
fuente