Iniciar outra atividade

Quando concluir a lição anterior, você terá um app que exibe uma atividade que consiste em apenas uma tela, com um campo de texto e um botão Send. Nesta lição, você adicionará código à MainActivity para iniciar uma nova atividade para exibir uma mensagem quando o usuário tocar no botão Enviar.

Responder ao botão "Send"

Siga as etapas a seguir para adicionar um método à classe MainActivity chamada ao tocar no botão Send:

  1. No arquivo app > java > com.example.myfirstapp > MainActivity, adicione o stub de método sendMessage() a seguir:

    Kotlin

    class MainActivity : AppCompatActivity() {
        override fun onCreate(savedInstanceState: Bundle?) {
            super.onCreate(savedInstanceState)
            setContentView(R.layout.activity_main)
        }
    
        /** Called when the user taps the Send button */
        fun sendMessage(view: View) {
            // Do something in response to button
        }
    }
    

    Java

    public class MainActivity extends AppCompatActivity {
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
        }
    
        /** Called when the user taps the Send button */
        public void sendMessage(View view) {
            // Do something in response to button
        }
    }
    

    Talvez seja exibido um erro, porque o Android Studio não pode resolver a classe View usada como argumento do método. Para limpar o erro, clique na declaração View, coloque o cursor sobre ela e pressione Alt+Enter ou Option+Enter no Mac, para executar uma correção rápida. Se um menu for exibido, selecione Import class.

  2. Retorne ao arquivo activity_main.xml para chamar o método com o botão:
    1. Selecione o botão no Layout Editor.
    2. Na janela Attributes, localize a propriedade onClick e selecione sendMessage [MainActivity] na lista suspensa.

    Agora, ao tocar no botão, o sistema chamará o método sendMessage().

    Observe os detalhes desse método. Eles são necessários para que o sistema reconheça o método como compatível com o atributo android:onClick. Especificamente, o método tem as seguintes características:

    • Acesso público.
    • Um valor vazio ou, em Kotlin, um valor de retorno unit implícito.
    • View como o único parâmetro. Esse é o objeto View em que você clicou no final da Etapa 1.
  3. A seguir, preencha esse método para ler o conteúdo do campo de texto e enviar esse texto a outra atividade.

Criar uma intent

Um Intent é um objeto que fornece vínculos de tempo de execução entre componentes separados, como duas atividades. O Intent representa a intenção do app de fazer algo. Você pode usar intents para uma ampla variedade de tarefas, mas, nesta lição, a intent iniciará outra atividade.

Em MainActivity, adicione a constante EXTRA_MESSAGE e o código sendMessage(), conforme mostrado aqui:

Kotlin

const val EXTRA_MESSAGE = "com.example.myfirstapp.MESSAGE"

class MainActivity : AppCompatActivity() {
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)
    }

    /** Called when the user taps the Send button */
    fun sendMessage(view: View) {
        val editText = findViewById<EditText>(R.id.editTextTextPersonName)
        val message = editText.text.toString()
        val intent = Intent(this, DisplayMessageActivity::class.java).apply {
            putExtra(EXTRA_MESSAGE, message)
        }
        startActivity(intent)
    }
}

Java

public class MainActivity extends AppCompatActivity {
    public static final String EXTRA_MESSAGE = "com.example.myfirstapp.MESSAGE";
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
    }

    /** Called when the user taps the Send button */
    public void sendMessage(View view) {
        Intent intent = new Intent(this, DisplayMessageActivity.class);
        EditText editText = (EditText) findViewById(R.id.editTextTextPersonName);
        String message = editText.getText().toString();
        intent.putExtra(EXTRA_MESSAGE, message);
        startActivity(intent);
    }
}

É provável que o Android Studio encontre erros Cannot resolve symbol novamente. Para limpar os erros, pressione Alt+Enter ou Option+Return no Mac. Suas importações serão as seguintes:

Kotlin

import androidx.appcompat.app.AppCompatActivity
import android.content.Intent
import android.os.Bundle
import android.view.View
import android.widget.EditText

Java

import androidx.appcompat.app.AppCompatActivity;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.widget.EditText;

Ainda há um erro para DisplayMessageActivity, mas isso não é um problema. Você o corrigirá na próxima seção.

Veja o que está acontecendo em sendMessage():

  • O construtor do Intent usa dois parâmetros, um Context e um Class.

    O parâmetro Context é usado primeiro porque a classe Activity é uma subclasse de Context.

    Nesse caso, o parâmetro Class do componente do app, ao qual o sistema envia o Intent, que, nesse caso, é a atividade a ser iniciada.

  • O método putExtra() adiciona o valor de EditText à intent. Uma Intent pode carregar tipos de dados como pares de chave-valor chamados de extras.

    Sua chave é uma constante EXTRA_MESSAGE pública porque a próxima atividade usará a chave para recuperar o valor do texto. É recomendável definir chaves para intents extras com o nome do pacote do app como prefixo. Isso garante que as chaves sejam únicas caso seu app interaja com outros.

  • O método startActivity() inicia uma instância da DisplayMessageActivity especificada pela Intent. Em seguida, você precisa criar essa classe.

Criar a segunda atividade

Para criar a segunda atividade, siga as etapas a seguir:

  1. Na janela Project clique com o botão direito do mouse na pasta app e selecione New > Activity > Empty Activity.
  2. Na janela Configure Activity, insira "DisplayMessageActivity" em Activity Name. Deixe todas as outras propriedades definidas como padrão e clique em Finish.

O Android Studio faz três coisas automaticamente:

  • Cria o arquivo DisplayMessageActivity.
  • Cria o arquivo de layout activity_display_message.xml, que corresponde ao arquivo DisplayMessageActivity.
  • Adiciona o elemento <activity> se necessário em AndroidManifest.xml.

Se você executar o app e tocar no botão na primeira atividade, a segunda atividade será iniciada, mas estará vazia. Isso ocorre porque a segunda atividade utiliza o layout vazio fornecido pelo modelo.

Adicionar uma visualização de texto

A visualização de texto centralizada no topo do layout.
Figura 1. A visualização de texto centralizada no topo do layout.

A nova atividade inclui um arquivo de layout vazio. Siga estas etapas para adicionar uma visualização de texto ao local em que a mensagem aparece:

  1. Abra o arquivo app > res > layout > activity_display_message.xml.
  2. Clique em Enable Autoconnection to Parent na barra de ferramentas. Isso habilita a conexão automática. Veja a Figura 1.
  3. No painel Palette, clique em Text, arraste uma TextView para o layout e solte-a próximo ao centro da parte superior do layout para que se encaixe na linha vertical exibida. O Autoconnect adiciona limitações esquerda e direita para colocar a visualização no centro horizontal.
  4. Crie mais uma restrição do topo da visualização de texto para o topo do layout, de forma que ela apareça conforme mostrado na figura 1.

Opcionalmente, faça mudanças no estilo do texto expandindo textAppearance no painel Common Attributes da janela Attributes e altere atributos, como textSize e textColor.

Exibir a mensagem

Nesta etapa, você modificará a segunda atividade para exibir a mensagem que foi transmitida pela primeira.

  1. Em DisplayMessageActivity, adicione o seguinte código ao método onCreate():

    Kotlin

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_display_message)
        
        // Get the Intent that started this activity and extract the string
        val message = intent.getStringExtra(EXTRA_MESSAGE)
    
        // Capture the layout's TextView and set the string as its text
        val textView = findViewById<TextView>(R.id.textView).apply {
            text = message
        }
    }
    

    Java

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_display_message);
        
        // Get the Intent that started this activity and extract the string
        Intent intent = getIntent();
        String message = intent.getStringExtra(MainActivity.EXTRA_MESSAGE);
    
        // Capture the layout's TextView and set the string as its text
        TextView textView = findViewById(R.id.textView);
        textView.setText(message);
    }
    
  2. Pressione Alt+Enter ou Option+Return no Mac para importar as outras classes necessárias:

    Kotlin

    import androidx.appcompat.app.AppCompatActivity
    import android.content.Intent
    import android.os.Bundle
    import android.widget.TextView
    

    Java

    import androidx.appcompat.app.AppCompatActivity;
    import android.content.Intent;
    import android.os.Bundle;
    import android.widget.TextView;
    

Adicionar navegação para cima

Todas as telas que não são o ponto de entrada principal, ou seja, que não são a tela inicial, precisam oferecer uma navegação que direcione o usuário à tela do pai lógico na hierarquia do app. Para fazer isso, adicione um botão Up na barra de apps.

Para adicionar um botão Up, é necessário declarar qual atividade é o pai lógico no arquivo AndroidManifest.xml. Abra o arquivo em app > manifests > AndroidManifest.xml, localize a tag <activity> para DisplayMessageActivity e a substitua-a pelo seguinte:

<activity android:name=".DisplayMessageActivity"
          android:parentActivityName=".MainActivity">
    <!-- The meta-data tag is required if you support API level 15 and lower -->
    <meta-data
        android:name="android.support.PARENT_ACTIVITY"
        android:value=".MainActivity" />
</activity>

O sistema Android adicionará automaticamente o botão Up à barra de apps.

Executar o app

Clique em Apply Changes na barra de ferramentas para executar o app. Quando abrir, digite uma mensagem no campo de texto e toque em Send para ver a mensagem na segunda atividade.

App aberto, com texto inserido na tela esquerda e exibido na direita.
Figura 2. App aberto, com texto inserido na tela da esquerda e exibido na da direita.

Pronto, você criou seu primeiro app Android!

Para continuar aprendendo as noções básicas de desenvolvimento de apps Android, volte para Criar seu primeiro app e siga os outros links fornecidos lá.