Como iniciar uma nova atividade ao clicar no botão

Respostas:

1116

Fácil.

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

Os extras são recuperados do outro lado via:

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

Não se esqueça de adicionar sua nova atividade no AndroidManifest.xml:

<activity android:label="@string/app_name" android:name="NextActivity"/>
Emmanuel
fonte
18
Onde está o botão, clique em parte? (clique o botão → transição para a próxima atividade)
Jonny
4
@ Jonny: Aqui está um exemplo de um clique no botão. stackoverflow.com/a/7722428/442512
Emmanuel
8
Existe alguma diferença entre CurrentActivity.this.startActivity(myIntent)e startActivity(myIntent)?
Confunda
5
Sim, fácil lol. Há mais erros de codificação do que o código realmente digitado. Onde está faltando toda a interface xml e o código .java? Downvote
Liquid Core
111
Liquid, você gostaria que ele o empurrasse em um apk também? ;)
Casey Murray
60

Crie uma intenção para uma atividade ViewPerson e passe o PersonID (para uma pesquisa no banco de dados, por exemplo).

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

Então, no ViewPerson Activity, você pode obter o pacote de dados extras, garantir que não seja nulo (caso, às vezes, não passe dados) e obter os dados.

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

Agora, se você precisar compartilhar dados entre duas atividades, também poderá ter um Global Singleton.

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

Em seguida, chame-o em qualquer atividade:

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

As respostas atuais são ótimas, mas é necessária uma resposta mais abrangente para iniciantes. Existem três maneiras diferentes de iniciar uma nova atividade no Android, e todas elas usam a Intentclasse; Intenção Desenvolvedores Android .

  1. Usando o onClickatributo do botão. (Principiante)
  2. Atribuindo um OnClickListener()via uma classe anônima. (Intermediário)
  3. Método de interface ampla da atividade usando a switchinstrução (Pró)

Aqui está o link para o meu exemplo, se você quiser acompanhar:

1. Usando o onClickatributo do botão. (Principiante)

Os botões têm um onClickatributo encontrado no arquivo .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" />

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

Vantagem : Fácil de fazer em tempo real, modular e pode facilmente definir vários onClicks com a mesma intenção.

Desvantagem : Legibilidade difícil ao revisar.

2. Atribuindo um OnClickListener()via uma classe anônima. (Intermediário)

É quando você define um separado setOnClickListener()para cada um buttone substitui cada um onClick()com sua própria intenção.

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

Vantagem : Fácil de fazer em tempo real.

Desvantagem : haverá muitas classes anônimas que dificultarão a legibilidade ao revisar.

3. Método de interface ampla da atividade usando a switchinstrução (Pró)

É quando você usa uma switchinstrução para seus botões no onClick()método para gerenciar todos os botões da Atividade.

Na classe 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;
    }

Vantagem : Gerenciamento fácil de botões, pois todas as intenções dos botões são registradas em um único onClick()método


Para a segunda parte da pergunta, transmitindo dados, consulte Como transmito dados entre Atividades no aplicativo Android?

Martin Sing
fonte
Excelente resposta, obrigado! você conhece alguma penalidade de desempenho usando alguma das sugestões?
lmedinas
3
O nº 3 não é "profissional". É a opção menos legível e de manutenção, e será refatorada em # 1 ou # 2 pelo primeiro desenvolvedor experiente que a vir. (Ou eles vão usar Butterknife, que é a opção # 1 em esteróides.)
Kevin Krumwiede
Eu acho que os programadores profissionais não gostam do # 3. colocar, idk, 10 botões, clicar em manipulador dentro de 1 método é um pesadelo e não é profissional. O método com linhas de código zilion não o torna profissional. BEIJO .
Mehdi Dehghani
3 definitivamente não é "profissional"
Kaiser Keister
36

Quando o usuário clica no botão, diretamente dentro do XML assim:

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

Usando o atributo android:onClick, declaramos o nome do método que deve estar presente na atividade pai. Então eu tenho que criar esse método dentro da nossa atividade assim:

public void buttonClickFunction(View v)
{
            Intent intent = new Intent(getApplicationContext(), Your_Next_Activity.class);
            startActivity(intent);
}
IntelliJ Amiya
fonte
19
Intent iinent= new Intent(Homeactivity.this,secondactivity.class);
startActivity(iinent);
vishal rangani
fonte
2
Esta é apenas uma resposta parcial. além disso, não é suficiente, ou seja, não funcionará sem modificações adicionais no projeto.
andr
10
    Intent in = new Intent(getApplicationContext(),SecondaryScreen.class);    
    startActivity(in);

    This is an explicit intent to start secondscreen activity.
user1923551
fonte
8

Emmanuel,

Acho que as informações extras devem ser colocadas antes de iniciar a atividade, caso contrário, os dados ainda não estarão disponíveis se você os estiver acessando no método onCreate de NextActivity.

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

myIntent.putExtra("key", value);

CurrentActivity.this.startActivity(myIntent);
user1337489
fonte
7

Na atividade de envio, tente o seguinte 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);

            }

Na atividade de recebimento, tente o seguinte 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);

Em seguida, basta adicionar o seguinte código ao arquivo AndroidManifest.xml

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

Tente este método simples.

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

Você pode tentar este código:

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

A maneira de iniciar novas atividades é transmitir uma intenção e existe um tipo específico de intenção que você pode usar para passar dados de uma atividade para outra. Minha recomendação é que você verifique os documentos do desenvolvedor do Android relacionados às intenções ; é uma riqueza de informações sobre o assunto e também tem exemplos.

Brian Driscoll
fonte
4

Kotlin

Primeira atividade

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

Segunda atividade

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

Sugestão

Sempre coloque as chaves em um arquivo constante para uma maneira mais gerenciada.

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

Iniciar uma atividade de outra atividade é um cenário muito comum entre aplicativos Android.
Para iniciar uma atividade, você precisa de um objeto Intent .

Como criar objetos de intenção?

Um objeto de intenção recebe dois parâmetros em seu construtor

  1. Contexto
  2. Nome da atividade a ser iniciada. (ou nome completo do pacote)

Exemplo:

insira a descrição da imagem aqui

Assim, por exemplo, se você tiver duas atividades, dizer HomeActivitye DetailActivitye você quer começar DetailActivitya partir de HomeActivity (HomeActivity -> DetailActivity).

Aqui está o trecho de código que mostra como iniciar o DetailActivity a partir de

HomeActivity.

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

E você terminou.

Voltando ao botão, clique em parte.

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

Inicie outra atividade a partir dessa atividade e você também pode passar parâmetros via Bundle Object.

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

Recuperar dados em outra atividade (YourActivity)

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

Implemente a interface View.OnClickListener e substitua o 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;
            }
user1918566
fonte
2

Embora as respostas adequadas já tenham sido fornecidas, estou aqui para procurar a resposta no idioma Kotlin. Esta pergunta não é específica do idioma, por isso estou adicionando o código para realizar esta tarefa no idioma Kotlin.

Aqui está como você faz isso no Kotlin para o andorid

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

 }
Abdul Rehman
fonte
2

A maneira mais simples de abrir a atividade ao clicar no botão é:

  1. Crie duas atividades na pasta res, adicione um botão à primeira atividade e dê um nome para a onclickfunção.
  2. Deve haver dois arquivos java para cada atividade.
  3. Abaixo está o 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 (basta adicionar este bloco de código ao existente)

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

Pegue o botão em xml primeiro.

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

Faça o listner do botão.

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

Quando o botão é clicado:

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 receber os dados extras de NextActivity.class:

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

Escreva o código em sua primeira atividade.

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

Em secondActivity.class

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

Coloque o widget de botão no xml como abaixo

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

Depois disso, inicialize e manipule o ouvinte de clique em Activity, como abaixo.

No método Activity On Create:

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
fonte