Skip to content

Como criar uma Activity no Android

Como criar uma Activity no Android

Review of:

Reviewed by:
Rating:
5
On 12 de fevereiro de 2015
Last modified:27 de setembro de 2016

Summary:

Fala galera! Hoje vamos ver como criar uma Activity no Android.

Basicamente, Activity é uma classe que gerencia uma UI (interface com o usuário). Todas as aplicações Android começam por uma Activity. Ou seja, quando um aplicativo é iniciado, sua Activity principal é lançada.

Se você ainda não viu o último tutorial da série, clique no link a seguir: exibir mensagens no Android. Se você ainda continua é preguiçoso e apenas baixou o projeto, importe-o para sua workspace. Para tal, vá em File → Import… → Existing Projects into Workspace, dentro de General.

Ciclo de vida de uma Activity

Antes de começar, é muito importante conhecer o funcionamento de uma Activity. Observe o diagrama abaixo:

Como criar uma Activity no Android

A partir deste diagrama, fica mais fácil de entender o funcionamento. Implicitamente, ele introduz os estados que uma Activity pode assumir. Veja a próxima imagem:

Como criar uma Activity no Android

Segue uma breve explicação de cada método nativo da classe Activity:

  • onCreate(): É a primeira função a ser executada quando uma Activity é lançada. Geralmente é a responsável por carregar os layouts XML e outras operações de inicialização. É executada somente uma vez durante a “vida útil” da Activity.
  • onStart(): É chamada imediatamente após a onCreate() – e também quando uma Activity que estava em background volta a ter foco.
  • onResume(): Assim como a onStart(), é chamada na inicialização da Activity (logo após a própria onStart()) e também quando uma Activity volta a ter foco. Qual a diferença entre as duas? A onStart() só é chamada quando a Activity não estava mais visível na tela e volta a ter o foco, enquanto a onResume() sempre é chamada nas “retomadas de foco”.
  • onPause(): É a primeira função a ser invocada quando a Activity perde o foco (ou seja, uma outra Activity vem à frente).
  • onStop(): Análoga à onPause(), só é chamada quando a Activity fica completamente encoberta por outra Activity (não é mais visível).
  • onDestroy(): A última função a ser executada. Depois dela, a Activity é considerada “morta” – ou seja, nao pode mais ser relançada. Se o usuário voltar a requisitar essa Activity, outro objeto será contruído.
  • onRestart(): Chamada imediatamente antes da onStart(), quando uma Activity volta a ter o foco depois de estar em background.

Como criar uma Activity

Para criar uma nova Activity, são três passos básicos: criar o layout (como já visto neste link), criar a classe que estende a classe Activity, declarar essa nova classe no AndroidManifest.xml.

Vamos então alterar nosso projeto, de forma que a primeira tela seja apenas para listar os carros cadastrados no banco de dados.

Primeiramente, vamos alterar o arquivo activity_main.xml para que ele exiba somente a lista, e também um botão para cadastrar novos veículos.
PS: Não se esqueça de criar a constante “cadastrar” no arquivo /res/values/strings.xml.

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
   android:layout_width="fill_parent"
   android:layout_height="fill_parent"
   android:orientation="vertical" >
 
   <Button
       android:id="@+id/cadastrar"
       android:layout_width="wrap_content"
       android:layout_height="wrap_content"
       android:text="@string/cadastrar" />
 
   <ListView
       android:id="@+id/lista"
       android:layout_width="match_parent"
       android:layout_height="wrap_content" >
   </ListView>
 
</LinearLayout>

Vamos atualizar nossa Activity principal ListaCarros, fazendo as adaptações para o novo layout.

public class ListaCarros extends ActionBarActivity {
                Button cadastrar;
                ListView lista;
                List listaCarros;
                ArrayAdapter<String[]> adaptador;
                Dados dados;
                Cursor carros;
                @Override
                protected void onCreate(Bundle savedInstanceState) {
                               super.onCreate(savedInstanceState);
                               setContentView(R.layout.activity_main);
                               cadastrar = (Button) findViewById(R.id.cadastrar);
                               lista = (ListView) findViewById(R.id.lista);
                               listaCarros = new ArrayList();
                               adaptador = new Adaptador();
                               dados = new Dados(this);
                               cadastrar.setOnClickListener(new OnClickListener() {
                                               @Override
                                               public void onClick(View v) {
                                                               Intent i = new Intent(ListaCarros.this, CadastrarCarros.class);
                                                               startActivity(i);
                                               }
                               });
                               lista.setAdapter(adaptador);
                               atualizaLista();
                }
                @Override
                public boolean onCreateOptionsMenu(Menu menu) {
                               // Inflate the menu; this adds items to the action bar if it is present.
                               getMenuInflater().inflate(R.menu.main, menu);
                               return true;
                }
                @Override
                public boolean onOptionsItemSelected(MenuItem item) {
                               // Handle action bar item clicks here. The action bar will
                               // automatically handle clicks on the Home/Up button, so long
                               // as you specify a parent activity in AndroidManifest.xml.
                               int id = item.getItemId();
                               if (id == R.id.action_settings) {
                                               return true;
                               }
                               return super.onOptionsItemSelected(item);
                }
                // Classe responsável por criar um adaptador para as linhas do ListView
                class Adaptador extends ArrayAdapter {
                               Adaptador() {
                                               // Chama o construtor da classe ArrayAdapter, passando a classe
                                               // atual,
                                               // um layout padrão e a lista dos itens que serão adicionados.
                                               super(ListaCarros.this, android.R.layout.simple_list_item_1,
                                                                              listaCarros);
                               }
                               // Vamos sobrepor o método getView, pois é aqui que vamos chamar nosso
                               // layout
                               // customizado
                               @Override
                               public View getView(int position, View convertView, ViewGroup parent) {
                                               // Instanciando os itens necessários: linha atual, classe
                                               // Armazenador
                                               // e o conteúdo que será inserido
                                               View linha = convertView;
                                               Armazenador armazenador = null;
                                               final String[] item_linha = (String[]) listaCarros.get(position);
                                               // Neste trecho é que chamaos nosso layout. Usamos o método
                                               // getLayoutInflater()
                                               // e depois indicamos o layout. Também já inserimos os dados na
                                               // posição atual
                                               // através da classe Armazenador.
                                               if (linha == null) {
                                                               LayoutInflater inflater = getLayoutInflater();
                                                               linha = inflater.inflate(R.layout.linha_carro, null);
                                                               armazenador = new Armazenador(linha, position);
                                                               linha.setTag(armazenador);
                                               } else {
                                                               armazenador = (Armazenador) linha.getTag();
                                               }
                                               // Agora sim, vamos jogar os dados nos seus respectivos campos do
                                               // layout da linha
                                               armazenador.popularFormulario((String[]) listaCarros.get(position));
                                               // Retorno obrigatório do método
                                               return linha;
                               }
                }
                // Classe responsável por "jogar" os dados nos campos corretos
                class Armazenador {
                               // Declaração dos campos
                               private TextView nomeCarro = null;
                               private TextView anoCarro = null;
                               private TextView corCarro = null;
                               // Construtor que instancia os campos
                               Armazenador(View linha, int position) {
                                               nomeCarro = (TextView) linha.findViewById(R.id.nomeCarro);
                                               anoCarro = (TextView) linha.findViewById(R.id.anoCarro);
                                               corCarro = (TextView) linha.findViewById(R.id.corCarro);
                               }
                               // Método para "jogar" os textos nos respectivos campos
                               void popularFormulario(String[] c) {
                                               nomeCarro.setText(c[0]);
                                               anoCarro.setText(c[1]);
                                               corCarro.setText(c[2]);
                               }
                }
                private void atualizaLista() {
                               adaptador.clear(); // Limpa o adaptador para evitar duplicados
                               carros = dados.obterTodos();
                               carros.moveToFirst(); // Move o ponteiro para o primeiro registro
                               while (!carros.isAfterLast()) {
                                               String veiculo = carros.getString(1).toString();
                                               String ano = carros.getString(2).toString();
                                               String cor = carros.getString(3).toString();
                                               String id = String.valueOf(carros.getInt(0));
                                               String[] c = { veiculo, ano, cor, id }; // Cria um array com os
                                                                                                                                                                                                            // dados do carro
                                               adaptador.add(c); // Adiciona no ArrayList
                                               carros.moveToNext(); // Move o ponteiro para o próximo registro
                               }
                               adaptador.notifyDataSetChanged(); // Atualiza a lista
                }
}

Vamos então criar nosso layout para cadastrar os novos veículos. Vamos chama-lo de cadastrar.xml.

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
   android:layout_width="fill_parent"
   android:layout_height="fill_parent"
   android:orientation="vertical" >
 
   <EditText
       android:id="@+id/veiculo"
       android:layout_width="match_parent"
       android:layout_height="wrap_content"
       android:hint="@string/veiculo" >
 
       <requestFocus />
   </EditText>
 
   <EditText
       android:id="@+id/ano"
       android:layout_width="match_parent"
       android:layout_height="wrap_content"
       android:ems="10"
       android:hint="@string/ano" />
 
   <EditText
       android:id="@+id/cor"
       android:layout_width="match_parent"
       android:layout_height="wrap_content"
       android:ems="10"
       android:hint="@string/cor" />
 
   <Button
       android:id="@+id/salvar"
       android:layout_width="wrap_content"
       android:layout_height="wrap_content"
       android:text="@string/salvar" />
 
   <Button
       android:id="@+id/listar"
       android:layout_width="wrap_content"
       android:layout_height="wrap_content"
       android:text="@string/listar" />
 
</LinearLayout>

Como criar uma Activity no Android

E agora, vamos criar a nova Activity CadastrarCarros, que será a nova responsável por inserir os registros no banco de dados.

public class CadastrarCarros extends ActionBarActivity {
                EditText veiculo, ano, cor;
                Button salvar, listar;
                Dados dados;
                @Override
                protected void onCreate(Bundle savedInstanceState) {
                               super.onCreate(savedInstanceState);
                               setContentView(R.layout.cadastrar);
                               veiculo = (EditText) findViewById(R.id.veiculo);
                               ano = (EditText) findViewById(R.id.ano);
                               cor = (EditText) findViewById(R.id.cor);
                               salvar = (Button) findViewById(R.id.salvar);
                               listar = (Button) findViewById(R.id.listar);
                               dados = new Dados(this);
                               salvar.setOnClickListener(new OnClickListener() {
                                               @Override
                                               public void onClick(View v) {
                                                               dados.inserir(veiculo.getText().toString(), ano.getText()
                                                                                                              .toString(), cor.getText().toString());
                                                                              Toast.makeText(CadastrarCarros.this,
                                                                                                              "Registro inserido com sucesso!",
                                                                                                              Toast.LENGTH_SHORT).show();
                                                               veiculo.setText(null);
                                                               ano.setText(null);
                                                              cor.setText(null);
                                               }
                               });
                               listar.setOnClickListener(new OnClickListener() {
                                               @Override
                                               public void onClick(View v) {
                                                               Intent i = new Intent(CadastrarCarros.this, ListaCarros.class);
                                                               startActivity(i);
                                               }
                               });
                }
                @Override
                public boolean onCreateOptionsMenu(Menu menu) {
                               // Inflate the menu; this adds items to the action bar if it is present.
                               getMenuInflater().inflate(R.menu.main, menu);
                               return true;
                }
                @Override
                public boolean onOptionsItemSelected(MenuItem item) {
                               // Handle action bar item clicks here. The action bar will
                               // automatically handle clicks on the Home/Up button, so long
                               // as you specify a parent activity in AndroidManifest.xml.
                               int id = item.getItemId();
                               if (id == R.id.action_settings) {
                                               return true;
                               }
                               return super.onOptionsItemSelected(item);
                }
}

Como criar uma Activity no Android

E não podemos nos esquecer de declarar a nova Activity no arquivo AndroidManifest.xml.

<activity android:name="br.com.yesbr.tutorial.CadastrarCarros" ></activity>

Rode a aplicação e veja como ficou.

E no final das contas, como criar uma Activity no Android?

Para criar uma nova Activity, devemos instanciar um objeto da classe Intent, passando como parâmetros o contexto atual da aplicação e a nova classe que será chamada. As ações foram inseridas nas ações dos botões Cadastrar na classe ListaCarros e Salvar na classe CadastrarCarros. Depois, chamamos o método startActivity(), passando como parâmetro o objeto Intent que foi criado.

Considerações Finais

Agora que já sabemos como criar várias Activities, podemos separar as ações da nossa aplicação em várias telas. Porém, ainda não foi criada a parte de edição dos dados, e iremos ver essa etapa no próximo tutorial, quando veremos como passar parâmetros para uma Activity.

Baixe o projeto atual aqui.

Falou, galera!

No comment yet, add your voice below!


Add a Comment

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *