Como abrir uma segunda atividade clicando em um botão no aplicativo Android

96

Estou aprendendo a construir aplicativos Android e preciso de ajuda específica. Não consigo entender quais bits de código de modelo devo alterar e quais bits são estáticos.

Na pasta LAYOUT , tenho meu ACTIVITY_MAIN.XML que diz

 <?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>

Em seguida, tenho minha segunda atividade ACTIVITY_SEND_PHOTOS.XML que é

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

Em seguida, tenho meu MainActivity.java (é este o .class?) Que lê pacote 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
 }
 }

e então meu arquivo SendPhotos.java que é;

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

 }

Gostaria que o botão da minha atividade principal se vinculasse à minha atividade enviar fotos, simplesmente abrindo essa atividade, nada de especial, não enviando nenhum dado nem nada.

Eu sei que em algum lugar eu preciso do meu

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

mas não tenho ideia do que substituir ToActivity.class ou o que mais preciso e onde.

Henry Aspden
fonte
1
ToActivity.class é o seu nome de segunda atividade
Niranj Patel
Esta pode ser a melhor fonte para você
Usama Sadiq,
A classe Intent não tem nenhum construtor que aceite duas classes como argumento !. O que devo fazer?
Emad Aghayi

Respostas:

155

Você pode ir para a atividade desejada clicando no botão. apenas adicione esta linha.

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

Em sua atividade principal, basta adicionar este método:

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

E o mais importante: não se esqueça de definir sua atividade em manifest.xml

 <activity>
      android:name=".ToActivity"
      android:label="@string/app_name">          
 </activity>
Juned
fonte
3
Você deve adicionar >a tag de atividade
Mageek
2
Isso não está funcionando para mim. O View, Intente os nomes das atividades estão em vermelho. Eu preciso importar algo para o View?
Srujan Barai
1
@SrujanBarai sim, ambos import android.view.View; e import android.content.Intent; deve ser importado
William Reed
Funcionou bem para mim. No entanto, ele não precisa de um setOnClickListener () em seu botão?
Evaggelos Manousakis
1
@VaggelisManousakis não, não é necessário porque já está lá no xmlandroid:onClick="sendMessage"
junho
30

Tente isto

  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
fonte
mas onde? Recebo erros em todos os lugares se tentar colocar isso dentro do .java no eclipse
Henry Aspden
@HenryAspden importa onclocklistener e Button.
JD de
@HenryAspden coloque este código depois de onCreate e depois de encontrar seu id.
JD
@HenryAspden eu editei meu código agora tente isso. Eu coloquei este código em onCreate, tente desta forma.
JD
11

Da atividade: onde você está atualmente?

Para a atividade: para onde você quer ir?

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

Ambas as Activity devem ser incluídas no arquivo de manifesto, caso contrário, não encontrará o arquivo de classe e lançará Force close.

Edite seu Mainactivity.java

crate button's object;

agora escreva o código para o evento de clique.

        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 você.

Chintan Khetiya
fonte
isso vai dentro do layout ou do .java?
Henry Aspden
ok, você pode colocar este código no evento de clique do botão no arquivo 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);       
    }  
});

A resposta para o noob completo de um noob completo: MainActivityé o nome da primeira atividade. MainActivity2é o nome da segunda atividade. button1é o ID do botão em xml para MainActivityAtividade.

iAmNotVeryGoodAtThis
fonte
1
apenas para ajudar os outros ... pelo "nome do botão" você está se referindo ao ID?
Henry Aspden
De fato . Corrigido para refletir sua recomendação
iAmNotVeryGoodAtThis
5

apenas siga esta etapa (não estou escrevendo código apenas Bcoz, você pode copiar e colar e não pode aprender).

  1. primeiro você precisa declarar um botão que você tem no layout

  2. Faça referência a esse botão encontrando seu id (usando findviewById) em oncreate

  3. setlistener para botão (como setonclick listener)

  4. última manipulação do evento de clique (significa iniciar uma nova atividade usando a intenção como você já sabe)

  5. Não se esqueça de adicionar atividade no arquivo de manifesto

BTW, isto é muito simples, gostaria de sugerir que começar com tutoriais simples disponíveis na rede será melhor para você.

Boa sorte para Android

Kalpesh Lakhani
fonte
3

Substitua o código de linha abaixo:

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

Adicione as linhas abaixo em seu arquivo de manifesto:

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

Substitua seu MainActivity.class por estes códigos

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

Adicione este Código em seu AndroidManifest.xml depois </activity>e Antes</application>

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

Isso sempre funciona, qualquer um deve estar bem:

@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
fonte
2

adicione o código abaixo ao arquivo 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" />

e apenas adicione o método abaixo ao arquivo MainActivity.java:

public void buttonClick(View view){
  Intent i = new Intent(getApplicationContext()SendPhotos.class);
  startActivity(i);
}
Md Nakibul Hassan
fonte
Você tem um erro de digitação, um ponto de interrogação antes do nome do arquivo
Mathieu VIALES
Desculpe pelo erro
Md Nakibul Hassan
1

Se você tiver dois botões e tiver a mesma chamada de id para seus eventos de clique de botão 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) {

        }
    });

Ao clicar em button1, button2funcionará e você não poderá abrir sua segunda atividade.

Serdar Günaydın
fonte
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" />

EM 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
fonte
1

Você pode ir para a atividade desejada clicando no botão. basta adicionar
android: onClick = "timerApp" nesta linha.

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

Em sua atividade principal, basta adicionar este método:

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

OU no método onCreate () adicione o código abaixo

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
fonte