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

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

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?


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

19
Intent iinent= new Intent(Homeactivity.this,secondactivity.class);
startActivity(iinent);

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.

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

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"

7
Intent i = new Intent(firstactivity.this, secondactivity.class);
startActivity(i);

7

Tente este método simples.

startActivity(new Intent(MainActivity.this, SecondActivity.class));

5

Você pode tentar este código:

Intent myIntent = new Intent();
FirstActivity.this.SecondActivity(myIntent);

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.


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

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

});

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", "xyz@gmail.com");
startActivity(intent);

Recuperar dados em outra atividade (YourActivity)

String s = getIntent().getStringExtra("USER_NAME");

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

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)

 }

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>

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

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
}

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

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);
    }
});
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.