Save the date! Android Dev Summit is coming to Mountain View, CA on November 7-8, 2018.

Inicie outra activity

Ao concluir a lição anterior, você terá um aplicativo que exibe uma activity (uma só tela) com um campo de texto e um botão. Nesta lição, você adicionará código a MainActivity para iniciar uma nova activity quando o usuário clicar no botão Send.

Observação: Esta lição pressupõe que você esteja usando o Android Studio 3.0.

Responder ao botão Send

Adicione um método em MainActivity.java que será chamado pelo botão da seguinte maneira:

  1. No arquivo app > java > com.example.myfirstapp > MainActivity.java, adicione o stub do método sendMessage() conforme é mostrado abaixo:
    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. Dessa forma, clique para colocar o cursor na declaração View e execute um Reparo Rápido ao pressionar Alt+Enter (ou Option+Enter no Mac). (Se um menu for exibido, selecione Import class.)

  2. Agora, retorne ao arquivo activity_main.xml para chamar esse método pelo botão:
    1. Clique para selecionar 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 chama o método sendMessage().

Observe os detalhes desse método que são necessários para que o sistema o reconheça como compatível com o atributo android:onClick. Especificamente, o método deve declarar o seguinte:

  • Acesso público
  • Um valor de retorno vazio
  • Um View como único parâmetro (trata-se do objeto View que foi clicado)

A seguir, você preencherá esse método para ler o conteúdo do campo de texto e para enviar esse texto a outra activity.

Criar uma intent

Uma Intent é um objeto que fornece vínculos de tempo de execução entre componentes separados (como duas activities). A Intent representa uma “intenção de fazer algo” do aplicativo. Você pode usar as intents para uma ampla variedade de tarefas, mas, nesta lição, a intent iniciará outra activity.

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

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.editText);
        String message = editText.getText().toString();
        intent.putExtra(EXTRA_MESSAGE, message);
        startActivity(intent);
    }
}

O Android Studio novamente apresentará erros Cannot resolve symbol, portanto, pressione Alt+Enter (ou Option+Return no Mac). Suas importações devem resultar em:

import android.content.Intent;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.EditText;

Um erro para DisplayMessageActivity permanece, mas tudo bem; você vai corrigi-lo na próxima seção.

Está acontecendo o seguinte em sendMessage():

  • O construtor Intent usa dois parâmetros:
    • Um Context como o primeiro parâmetro (this é usado porque a classe Activity é uma subclasse de Context)
    • A Class do componente do aplicativo ao qual o sistema deve enviar o Intent (nesse caso, a activity que deve ser iniciada).
  • O método putExtra() adiciona o valor de EditText à intent. Uma Intent pode carregar tipos de dados como pares de valor-chave chamados de extras. Sua chave é uma EXTRA_MESSAGE pública constante porque a próxima activity usa a chave para recuperar o valor de texto. É recomendável definir chaves para extras de intents usando o nome do pacote do aplicativo como prefixo. Isso garante que as chaves sejam únicas caso seu aplicativo interaja com outros.
  • O método startActivity() inicia uma instância da DisplayMessageActivity especificada pelo Intent. Agora, você precisa criar essa classe.

Criar a segunda activity

  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, digite "DisplayMessageActivity" em Activity Name e clique em Finish (deixe as demais propriedades definidas como os valores padrão).

O Android Studio faz três coisas automaticamente:

  • Cria o arquivo DisplayMessageActivity.java.
  • Cria o arquivo de layout activity_display_message.xml correspondente.
  • Adiciona o elemento <activity> necessário em AndroidManifest.xml.

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

Adicionar uma visualização de texto

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

A nova activity incluirá um arquivo de layout vazio, portanto, agora você adicionará uma visualização de texto na qual a mensagem será exibida.

  1. Abra o arquivo app > res > layout > activity_display_message.xml.
  2. Clique em Turn On Autoconnect na barra de ferramentas (a opção deverá ser ativada, conforme é mostrado na figura 1).
  3. Na janela Pallete, clique em Text e arraste uma TextView para o layout. Coloque-a no topo do layout, próxima ao centro, para que ela 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 limitação do topo da visualização de texto para o topo do layout, de forma que ela apareça como é mostrado na figura 1.

Opcionalmente, faça ajustes ao estilo do texto expandindo textAppearance na janela Attributes e altere atributos como textSize e textColor.

Exibir a mensagem

Agora, você modificará a segunda activity para exibir a mensagem que foi passada pela primeira activity.

  1. Em DisplayMessageActivity.java, adicione o seguinte código ao método onCreate():
    @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 classes que estejam faltando. Suas importações devem resultar em:
    import android.content.Intent;
    import android.support.v7.app.AppCompatActivity;
    import android.os.Bundle;
    import android.widget.TextView;
    

Adicionar navegação

Cada uma das telas do seu aplicativo que não seja a principal (todas as telas que não sejam a tela “inicial”) devem oferecer navegação para que o usuário possa retornar à tela pai lógica na hierarquia do aplicativo ao tocar no botão Up da barra de aplicativos.

Basta declarar qual activity é o pai lógico no arquivo AndroidManifest.xml. Portanto, abra o arquivo em app > manifests > AndroidManifest.xml, localize a tag <activity> para DisplayMessageActivity e 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>

Agora, o sistema Android automaticamente adicionará o botão Up à barra de aplicativos.

Executar o aplicativo

Agora, execute o aplicativo novamente clicando em Apply Changes na barra de ferramentas. Quando ele for aberto, digite uma mensagem no campo de texto e toque em Send para que ela seja exibida na segunda activity.

Figura 2. Captura de tela das duas activities

Pronto, você criou seu primeiro aplicativo Android!

Para continuar aprendendo as noções básicas do desenvolvimento de aplicativos Android, siga o link abaixo para a próxima lição.