- 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!