- Rating:
- 5
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:

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:

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>

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);
}
}

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!