Como iniciar uma nova actividade ao carregar no botão

em uma aplicação Android, como você inicia uma nova atividade (GUI) quando um botão em outra atividade é clicado, e como você passa os dados entre essas duas atividades?

Author: MiguelHincapieC, 2010-11-15

25 answers

Calma.
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 te esqueças de adicionar a tua nova actividade no AndroidManifest.xml:
<activity android:label="@string/app_name" android:name="NextActivity"/>
 1177
Author: Emmanuel, 2016-05-18 17:34:33
As respostas actuais são óptimas, mas é necessária uma resposta mais abrangente para os principiantes. Existem 3 maneiras diferentes de iniciar uma nova atividade no Android, e todos eles usam a classe Intent; Intent | Android Desenvolvedores .
  1. usando o atributo onClick do botão. (Principiante)
  2. atribuir um OnClickListener() através de uma classe anónima. (Intermédio)
  3. método da interface de grande actividade usando a declaração switch. (Pro)
Aqui está o ... link para o meu exemplo se quiser seguir:

1. Usando o atributo onClick do botão. (Principiante)

Buttons have an onClick attribute that is found within the .ficheiro 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 no momento, modular, e pode facilmente definir múltiplos onClickpara a mesma intenção.

Desvantagem : dificuldade de leitura ao rever.

2. Atribuir um OnClickListener() através de um aula anónima. (Intermédio)

Isto é quando você define um separado setOnClickListener() para cada button e sobrepõe cada onClick() com a 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 no voo.

Desvantagem: haverá um monte de classes anônimas que tornará a legibilidade difícil ao rever.

3. Método da interface de nível alargado de actividade, utilizando a declaração switch. (Pro)

Isto é quando você usa um switch declaração para os seus botões dentro do método onClick() para gerir todos os botões da actividade.

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 : Gestão Fácil dos botões porque todas as intenções dos botões estão registadas num único método onClick()


Para a segunda parte da pergunta, passar dados, por favor veja como passo dados entre atividades na aplicação Android?
 69
Author: Martin Sing, 2020-03-30 20:43:02

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

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

Em seguida, na atividade do visor, você pode obter o pacote de dados extras, certifique-se de que não é nulo (no caso de, por vezes, não passar dados), em seguida, obter os dados.

Bundle extras = getIntent().getExtras();
if(extras !=null)
{
     personID = extras.getString("PersonID");
}
Agora, se você precisa compartilhar dados entre duas atividades, Você também pode ter um Singleton Global.
public class YourApplication extends Application 
{     
     public SomeDataClass data = new SomeDataClass();
}

Então chama-o em qualquer actividade 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
 62
Author: Bryan Denny, 2010-11-15 16:07:57

Quando o utilizador clica no botão, directamente 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 tem de estar presente na actividade parental. Então eu tenho que criar este método dentro de nossa atividade assim:

public void buttonClickFunction(View v)
{
            Intent intent = new Intent(getApplicationContext(), Your_Next_Activity.class);
            startActivity(intent);
}
 37
Author: IntelliJ Amiya, 2017-08-03 06:52:32
Intent iinent= new Intent(Homeactivity.this,secondactivity.class);
startActivity(iinent);
 20
Author: vishal rangani, 2013-02-11 10:48:52
    Intent in = new Intent(getApplicationContext(),SecondaryScreen.class);    
    startActivity(in);

    This is an explicit intent to start secondscreen activity.
 11
Author: user1923551, 2013-12-03 11:58:34
Emmanuel,

Acho que a informação extra deve ser colocada antes de iniciar a actividade, caso contrário, os dados ainda não estarão disponíveis se estiver a aceder-lhe no método de onCreate da NextActivity.

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

myIntent.putExtra("key", value);

CurrentActivity.this.startActivity(myIntent);
 8
Author: user1337489, 2012-04-16 23:53:39

A partir da actividade 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);

            }

A partir da actividade de recepção 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);
Então adicione o seguinte código ao AndroidManifest.ficheiro xml
  android:name="packagename.NameOfTheReceivingActivity"
  android:label="Title of the Activity"
  android:parentActivityName="packagename.NameOfSendingActivity"
 7
Author: Alex Irabor, 2016-01-29 13:27:03
Intent i = new Intent(firstactivity.this, secondactivity.class);
startActivity(i);
 7
Author: Mahtab, 2016-06-14 14:15:23
Tente este método simples.
startActivity(new Intent(MainActivity.this, SecondActivity.class));
 7
Author: joseph sarz, 2017-04-16 20:53:42

Pode tentar este código:

Intent myIntent = new Intent();
FirstActivity.this.SecondActivity(myIntent);
 5
Author: Prinkal, 2012-12-26 11:44:10
A forma de iniciar novas actividades é transmitir uma intenção, e há um tipo específico de intenção que pode usar para passar dados de uma actividade para outra. Minha recomendação é que você confira os documentos do desenvolvedor Android relacionados a intents ; é uma riqueza de informações sobre o assunto, e tem exemplos também.
 4
Author: Brian Driscoll, 2010-11-15 15:48:39

Kotlin

Primeira Actividade

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

Segunda Actividade

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

Sugestão

Coloque sempre as chaves em Ficheiro constante para uma forma mais gerida.

companion object {
    val PUT_EXTRA_USER = "user"
}
startActivity(Intent(this, SecondActivity::class.java)
  .putExtra(PUT_EXTRA_USER, "value"))
 4
Author: Khemraj, 2020-06-20 09:12:55
Iniciar uma actividade a partir de outra actividade é um cenário muito comum entre aplicações android.
Para iniciar uma actividade precisa de um objecto de intenção. Como criar objetos de intenção?

Um objecto de intenção toma dois parâmetro no seu construtor

  1. Contexto
  2. nome da actividade a iniciar. (ou pacote completo nome)

Exemplo:

enter image description here

Por exemplo, se você tem duas atividades, diga HomeActivity e DetailActivity e você quer começar DetailActivity de HomeActivity (HomeActivity-->DetailActivity).

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

Homeactividade.
Intent i = new Intent(HomeActivity.this,DetailActivity.class);
startActivity(i);
E acabou-se.
Voltando à parte do botão clique.
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);  
      }

});
 4
Author: Rohit Singh, 2020-06-20 09:12:55

Iniciar outra actividade a partir desta actividade e u pode passar parâmetros através do objecto do feixe também.

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

Obter dados noutra actividade (YourActivity)

String s = getIntent().getStringExtra("USER_NAME");
 3
Author: DroidNinja, 2017-06-23 12:02:45

// In Kotlin , pode fazer como /* Na primeira atividade, deixe a disposição da atividade há um botão que tem id como botão. Suponha que eu tenha que passar dados como tipo de cadeia de uma atividade para outra * /

     val btn = findViewById<Button>(R.id.button)
     btn.setOnClickListener {
        val intent = Intent(baseContext, SecondActivity::class.java).apply {
             putExtra("KEY", data)
        }
        startActivity(intent)
     }

/ / na segunda actividade, pode obter dados de outra actividade como

 val name = intent.getStringExtra("KEY")

/* suponha que você tem que passar um objeto personalizado, então ele deve ser Parcelável. que haja um tipo de colagem de classe que eu tenho que passar de uma atividade para outra */

import android.os.Parcelable
import kotlinx.android.parcel.Parcelize

@Parcelize
class Collage(val name: String, val mobile: String, val email: String) : Parcelable

/* actividade Primeiro, deixe aqui dados são tipo de colagem. que tenho de passar para outra actividade. */

val btn = findViewById<Button>(R.id.button)
         btn.setOnClickListener {
            val intent = Intent(baseContext, SecondActivity::class.java).apply {
                 putExtra("KEY", data)
            }
            startActivity(intent)
         }

/ / / depois a partir da Segunda actividade teremos como

val item = intent.extras?.getParcelable<Collage>("KEY")
 3
Author: Alok Mishra, 2020-08-05 03:23:22

Implemente a vista.Interface OnClickListener e sobrepor 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
Author: user1918566, 2017-06-15 14:38:23
Apesar de já terem sido dadas respostas adequadas, estou aqui para procurar a resposta na língua Kotlin. Esta questão não é sobre linguagem específica, então eu estou adicionando o código para realizar esta tarefa na linguagem Kotlin. Aqui está como se faz isto em Kotlin para andorid
testActivityBtn1.setOnClickListener{
      val intent = Intent(applicationContext,MainActivity::class.java)
      startActivity(intent)

 }
 2
Author: Abdul Rehman, 2017-10-14 10:32:45

A forma mais simples de abrir a actividade no botão é:

  1. crie duas actividades sob a pasta res, adicione um botão à primeira actividade e dê um nome à função onclick.
  2. deve haver dois ficheiros java para cada actividade.
  3. abaixo está o código:

Actividade principal.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>
 2
Author: sn n, 2019-03-04 09:58:25

Primeiro pegue no botão em xml.

  <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 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
Author: Jayesh Prajapati, 2018-01-01 08:30:19

Quando carregar no botão:

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 extra de NextActivity.class :

Bundle extra = getIntent().getExtras();
if (extra != null){
    String str = (String) extra.get("data"); // get a object
}
 1
Author: Hasib Akter, 2018-05-31 18:52:04
Escreva o código na sua primeira actividade .
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();
            }
         });

In secondActivity.classe

String name = getIntent().getStringExtra("Key");
 1
Author: Gyan Swaroop Awasthi, 2018-07-20 09:37:18

Colocar o elemento do botão em xml, como por baixo

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

Depois disso inicializar e manipular o Click listener na actividade como em baixo ..

Em actividade sobre o método de criação:

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);
    }
});
 1
Author: prakash421, 2018-11-09 14:20:57

Uma pergunta antiga, mas se o objectivo é mudar de páginas apresentadas, só tenho uma actividade e chamar a setContentView() quando quero mudar de páginas (normalmente em resposta ao Utilizador carregar num botão). Isto permite-me simplesmente ligar do conteúdo de uma página para outra. Sem intenção de insanidade de pacotes extras e qualquer coisa tentando passar dados para trás e para a frente.

Eu faço um monte de páginas em res/layout como de costume, mas não faço uma atividade para cada. Basta usar o setContentView() para mudar quando necessário.

Então o meu oncreato único() tem:

protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    LayoutInflater layoutInflater = getLayoutInflater();

    final View mainPage = layoutInflater.inflate(R.layout.activity_main, null);
    setContentView (mainPage);
    Button openMenuButton = findViewById(R.id.openMenuButton);

    final View menuPage = layoutInflatter.inflate(R.layout.menu_page, null);
    Button someMenuButton = menuPage.findViewById(R.id.someMenuButton);

    openMenuButton.setOnClickListener(new View.OnClickListener() {
        public void onClick(View v) {
            setContentView(menuPage);
        }
    });

    someMenuButton.setOnClickListener(new View.OnClickListener() {
        public void onClick(View v) {
            do-something-interesting;
            setContentView(mainPage);
        }
    }
}

Se quiser que o botão de trás volte para trás através das suas páginas internas antes de sair da aplicação, basta embrulhar setContentView() para gravar as páginas numa pequena pilha de páginas, e colocar essas páginas no manipulador onBackPressed ().

 1
Author: mrieker, 2020-06-24 20:33:32

O seu botão xml:

 <Button
    android:id="@+id/btn"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="jump to activity b"
    />

Actividade principal.java:

 Button btn=findViewVyId(R.id.btn);
btn.setOnClickListener(btnclick);
btnclick.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View v) {
               Intent intent=new Intent();
                intent.setClass(Mainactivity.this,b.class);
                startActivity(intent);
    }
});
 0
Author: samurai, 2020-11-26 03:58:00