Esta lição ensina a
Após completar a lição anterior, você terá um aplicativo que
exibe uma atividade (uma tela única) com um campo de texto e um botão. Nesta lição, você adicionará código
a MainActivity que inicia
uma nova atividade quando o usuário clica no botão Send.
Responder ao botão Send
- No arquivo res > layout > activity_main.xml, adicione o atributo
android:onClickao elemento<Button>, como mostrado abaixo:<Button android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="@string/button_send" android:onClick="sendMessage" />Este atributo informa ao sistema para chamar o método
sendMessage()em sua atividade, sempre que um usuário clica no botão. - No arquivo java > com.example.myfirstapp > MainActivity.java,
adicione o stub de método
sendMessage()como 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 clicks the Send button */ public void sendMessage(View view) { // Do something in response to button } }Para que o sistema combine esse método com o nome do método dado a
android:onClick, a assinatura deve estar exatamente como mostrada. Especificamente, o método deve:
A seguir, você preencherá esse método para ler o conteúdo do campo de texto e enviar esse texto a outra atividade.
Criar um intent
Intent é um objeto que fornece vínculos em tempo de execução
entre componentes separados (como duas atividades). O
Intent representa uma “intenção de fazer algo” do aplicativo.
Você pode usar os intents para uma ampla variedade de tarefas, mas, nesta lição, seu intent
inicia outra atividade.
Em MainActivity.java, adicione o código mostrado abaixo para
sendMessage():
public class MainActivity extends AppCompatActivity {
public final static 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 clicks the Send button */
public void sendMessage(View view) {
Intent intent = new Intent(this, DisplayMessageActivity.class);
EditText editText = (EditText) findViewById(R.id.edit_message);
String message = editText.getText().toString();
intent.putExtra(EXTRA_MESSAGE, message);
startActivity(intent);
}
}
O Android Studio exibirá erros Não pode resolver símbolo porque este código faz referência a classes não importadas. Você pode resolver alguns deles com a funcionalidade “import class” do Android Studio, pressionando Alt + Enter (ou Option + Return no Mac). Suas importações devem terminar como segue:
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.
Há muita coisa acontecendo em sendMessage(), portanto vamos explicar
o que está acontecendo.
O construtor Intent usa dois parâmetros:
- Um
Contextcomo o primeiro parâmetro (thisé usado porque a classeActivityé uma subclasse deContext) - A
Classdo componente do aplicativo ao qual o sistema deve enviar aIntent(nesse caso, a atividade que deve ser iniciada).Observação: A referência à
DisplayMessageActivityevidenciará um erro no Android Studio porque a classe ainda não existe. Ignore o erro por enquanto; você criará a classe em breve.
O método putExtra()
adiciona o valor de EditTextao 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
atividade usa a chave para recuperar o valor de texto. É uma prática recomendada
definir chaves para extras de intents usando o nome do pacote do aplicativo como prefixo. Isso
garante que as chaves sejam únicas se o aplicativo interagir com outros.
O método startActivity()
inicia uma instância da DisplayMessageActivity especificada
pela Intent. Agora você precisa criar a classe.
Criar a segunda atividade
- Na janela Projeto, clique com o botão direito na pasta do app e selecione New > Activity > Empty Activity.
- Na janela Configurar Atividades, digite "DisplayMessageActivity" em Activity Name e clique em Finish
O Android Studio automaticamente faz três coisas:
- Cria a classe
DisplayMessageActivity.javacom uma implementação do método necessárioonCreate(). - Cria o arquivo de layout correspondente
activity_display_message.xml - Adiciona o elemento necessário
<activity>emAndroidManifest.xml.
Se você executar o aplicativo e clicar no botão Enviar na primeira atividade, a segunda atividade começa, mas está vazia. Isso ocorre porque a segunda atividade utiliza o layout vazio padrão fornecido pelo modelo.
Exibir a mensagem
Agora você vai modificar a segunda atividade para exibir a mensagem que foi passada pela primeira atividade.
- Em
DisplayMessageActivity.java, adicione o seguinte código ao métodoonCreate():@Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_display_message); Intent intent = getIntent(); String message = intent.getStringExtra(MainActivity.EXTRA_MESSAGE); TextView textView = new TextView(this); textView.setTextSize(40); textView.setText(message); ViewGroup layout = (ViewGroup) findViewById(R.id.activity_display_message); layout.addView(textView); } - Pressione Alt + Enter (ou Option + Return no Mac) para importar classes que estejam faltando.
Suas importações devem acabar como segue:
import android.content.Intent; import android.support.v7.app.AppCompatActivity; import android.os.Bundle; import android.view.ViewGroup; import android.widget.TextView;
Há muitas coisas acontecendo aqui, portanto vamos explicar:
- A chamada
getIntent()captura o intent que iniciou a atividade. CadaActivityé chamada por umaIntent, independentemente de como o usuário navegou até lá. A chamadagetStringExtra()recupera os dados da primeira atividade. - Você programaticamente cria um
TextViewe define seu tamanho e mensagem. - Você adiciona a
TextViewao layout identificado porR.id.activity_display_message. Você lança o layout paraViewGroupporque esta é a superclasse de todos os layouts e contém o métodoaddView().
Observação: O layout XML gerado por versões
anteriores do Android Studio pode não conter
o atributo android:id. A chamada findViewById() falhará se o layout
não tiver o atributo android:id. Neste caso,
abra activity_display_message.xml e adicione o atributo
android:id="@+id/activity_display_message" ao elemento do layout.
Agora, você pode executar o aplicativo. Quando ele abrir, digite uma mensagem no campo de texto e clique em Send. A segunda atividade substitui a primeira na tela, mostrando a mensagem que você inseriu na primeira atividade.
Isso é tudo, você criou seu primeiro aplicativo Android!
Para saber mais, siga o link abaixo para acessar a próxima lição.