Criando uma Activity secundária

No post passado vimos como lançar uma Activity a partir de outra, usando as funções startActivity() e startActivityForResult().

Hoje usaremos esta técnica para mostrar ao usuário uma tela de “Boas Vindas” na nossa aplicação de exemplo, o QuickNotes.

Para criar essa nova Activity, usaremos alguma funções do Motodev. Se você não está usando a IDE da Motorola,  não tem problema – é só criar os arquivos manualmente. Porém recomendo o uso da IDE, por facilitar bastante a nossa vida.

Vamos começar criando a Activity que dará “Boas Vindas” ao usuário.

Vá até o menu “MOTODEV” >”New” > “New Android Activity”. Na tela de configuração, entre com o nome da Activity a ser criada:

Configurando a Activity a ser criada

Configurando a Activity a ser criada

Após clicar em “Finish”, já haverá a classe “WelcomeActivity” no diretório src do nosso projeto.

Com a Activity criada, o próximo passo é criar o arquivo XML que definirá o seu layout. Crie o arquivo ‘welcome.xml’ no diretorio res/layout com o seguinte conteúdo:

<?xml version="1.0" encoding="utf-8"?>
<TableLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
>
<TextView android:id="@+id/welcome_text_view"
android:layout_width="fill_parent"
android:layout_height="300dip"
android:gravity="center"
android:text="Bem vindo à aplicação QuickNotes!\n\nEssa aplicação foi feita durante o curso
'Desenvolvendo para Android' do site felipesilveira.com.br"
>
</TextView>
<Button
android:id="@+id/welcome_ok_button"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="Continuar"
>
</Button>
</TableLayout>

Este arquivo XML define uma Activity com um texto e um botão logo abaixo, com a palavra “Continuar”.

Após criado o arquivo, vamos carregá-lo no método onCreate() da WelcomeActivity():

		setContentView(R.layout.welcome);

Lançando a WelcomeActivity

Para lançar a WelcomeActivity a partir da MainActivity, usaremos a função startActivity(). Esta função recebe como parâmetro um Intent. Posteriormente iremos aprofundar nosso conhecimento sobre essa importante classe, mas por enquanto o que você precisa saber é que ela é usada para fazer a comunicação entre Activities.

No código abaixo instanciamos um Intent cuja única função é lançar a WelcomeActivity, e então o usamos como parâmetro para a startActivity.

Dessa forma, o código da MainActivity fica assim:

package br.com.felipesilveira.quicknotes;

import android.app.Activity;
import android.os.Bundle;
import android.content.Intent;

public class MainActivity extends Activity {
    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);

        Intent i = new Intent(this, WelcomeActivity.class);
        startActivity(i);
     }
}

Tratando os eventos de um botão

Até agora, já temos a Activity secundária sendo lançada, mas o que deve acontecer quando o usuário clicar no botão “Continuar”?

A WelcomeActivity deve morrer - Dessa forma, a última Activity instanciada será mostrada novamente – que por sinal é a nossa MainAcitivity!

Para fazer isso, devemos adicionar um listener ao botão para que o método finish() seja invocado ao clique do usuário. O método finish() da classe Activity força a “morte” desta.

O código da WelcomeActivity fica assim:

package br.com.felipesilveira.quicknotes;

import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;

public class WelcomeActivity extends Activity {
	/**
	 * @see android.app.Activity#onCreate(Bundle)
	 */
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.welcome);

        final Button button = (Button) findViewById(R.id.welcome_ok_button);

        button.setOnClickListener(new View.OnClickListener() {
            public void onClick(View v) {
                finish();
            }
        });
	}
}

Executando nosso projeto, temos a seguinte tela:

WelcomeActivity sendo executada

WelcomeActivity sendo executada

Assim, finalizamos nossa Activity de “Boas Vindas”. Até o próximo artigo!

Desenvolvendo para Android


Posts Relacionados

  1. Criando uma ListActivity
  2. Criando um projeto Android (Helloworld!)
  3. Activity – o que é isso?
  4. Acessando um Content Provider
  5. Como usar banco de dados em uma aplicação android

23 respostas to “Criando uma Activity secundária”

  1. Deywid disse:

    Ae! Continua que to aprendendo :D Muito intuitivo!!! Abraços

  2. Valeu! E no que depender de mim vou até o final nesse projeto! :)

  3. Daniel Marquesim disse:

    Eae Felipe, tudo bom?
    Cara, muito bom o seu tutorial, está me ajudando muito, porém não estou conseguindo criar uma
    Activity Secundária. Fiz tudo como vc explicou usando o eclipse, porém na hora de compilar o emulador de celular apresenta a seguinte msg de erro: “Sorry, the aplication Hello World 2 (process org.android.helloworld) has stopped unexpectedly. Please try again.”
    Será que você poderia me dar uma luz da causa desse erro? =]

    Vlw, []s

  4. Oi Daniel,

    A melhor forma de descobrir o que está acontecendo é coletando logs.

    Essa mensagem geralmente acontece quando uma fatal exception é lançada (Por exemplo, um RuntimeException). Pelo log você verá onde a exception foi lançada.

    Para coletar logs, use o logcat.

    Valeu!

  5. Anderson disse:

    Daniel, pode ser que o problema esteja no seu AndroidManifest.xml, verifique se existe duas referencias de neste arquivo. Pelo menos o problema que eu tinha era isso.

  6. Vinicius disse:

    ótimo tutorial!

    eu tive um problema na linha
    Intent i = new Intent(this, WelcomeActivity.class);

    deve ser a atualização da sdk, mas agora tem que usar o constructor desta forma:

    Intent intent = new Intent(WelcomeActivity .this, CategorySelection.class);

    abraço!

  7. Vinicius disse:

    outra dica
    para quem nao usa o MOTODEV (como eu) basta criar uma classe filha da Activity e no AndroidManifest.xml, colocar a referencia para a classe
    ex:

    eu criei a classe CategorySelection
    no manifest, coloquei o seguinte:

  8. Guilherme Meirelles disse:

    Já fiz de tudo, ou pelo menos quase tudo pra colocar esse código pra rodar. O tempo todo dá a mensagem abaixo:

    “Sorry, the aplication Teste2 (process android.teste2) has stopped unexpectedly. Please try again.”

    O que devo fazer?

  9. Guilherme Meirelles disse:

    Para todos que tiverem esse erro, no tutorial ficou faltando você adicionar a activity no AndroidManifest.xml.

    Ex:

  10. José Corsini disse:

    Guilherme, vou te dar 2 caminhos (ainda não estudei a estrutura do AndroidManifest.xml -> foi no chutômetro).

    1) Incluir a linha neste xml:

    ou

    2) Utilizar um “suporte” que o Eclipse dá para a criação desta linha no xml. Basta abrir o AndroidManifest.xml e clicar nas abas de suporte ao lado (Application -> Application Nodes -> Add). Obviamente, aqui é mais fácil de configurar inicialmente. Mas como te disse, ainda preciso estudar a estrutura.

    Aproveitando para agradecer ao Felipe pela iniciativa e parabenizar pela didática nos conteúdos.

  11. José Corsini disse:

    Depois do “:” dá pau por causa das tags… Logo, troque “{” por “<", ok?

    {activity android:name="WelcomeActivity"}{/activity}

  12. Jose disse:

    Valeu pela iniciativa cara!!

  13. Aurino disse:

    Alguém conseguir criar a Activity pelo eclipse? (não pelo MOTODEV). Quais os passos?

  14. Aurino, basta você criar uma classe comum, estendendo a classe Activity.

  15. Aurino disse:

    Vlw Felipe. Mas acabei baixando o MOTODEV. Aproveito para parabenizar pelo tutorial.

  16. Philipe disse:

    Eu consegui pelo eclipse, foi mesmo pelo AndroidManifest.xml do seguinte modo:
    No modo texto – adicionar
    na tag
    No modo padrão do editor – na parte inferior da janela, há uma aba application,
    clickando nela e seguindo para a parte inferior adicione sua activity em
    application nodes, e em attributes for -> Name, escolha a classe que herda de
    Activity.

  17. Fabio Morais disse:

    Felipe,

    Eu instalei o MOTODEV for Android 2.2, a versão para Windows 64 Bits, visto que meu computador está com Win7 64 Bits ( tem 4Gb de Ram, Core 2 Duo ). Mas não estou entendendo por tudo é tão lento !!! Tudo que faço demora uma eternidade! Para executar a aplicação, para adicionar uma Activity, tudo.. Para você ter uma idéia eu mandei rodar a aplicação apenas com o exemplo do “Hello Word” que vc postou e demorou mais de 10 min.. eu tive que reiniciar o computador.

    Sabe o que acontece ?

  18. Lina Ferreira disse:

    Oi,

    Nossa. Você mostrou o que eu estava precisando.

    Obrigada.

    Tchauzin!

  19. Claudinei disse:

    Para funcionar tem que adicionar no manifest.xml o seguinte:

    Depois da linha

  20. Claudinei disse:

    Para funcionar tem que adicionar no manifest.xml o seguinte sem as {}:
    {}

    Depois da linha {}

  21. Claudinei disse:

    Não da pra postar a solução aqui -_-#

  22. Jean disse:

    em fim, o projto foi abandonado? pq vi que muita gente teve problemas com Activity Secundária, inclusivi eu, sou iniciando em java, e não consegui passa dessa fase xD.

  23. Oi Jean,

    O projeto não foi abandonado. Ele teve um hiato nos últimos por fatla de tempo para escrever, mas essa semana eu retomo o projeto.
    Obrigado!

Deixe um comentário