• Nenhum resultado encontrado

Construção da classe MainActivity

Aplicativo Twitter ® Searches

Passo 5: Criando a terceira linha do componente GridLayout

4.5 Construção da classe MainActivity

As Figuras 4.17 a 4.27 implementam a lógica do aplicativo Twitter Searches na classe

MainActivity, a qual estende ListActivity. O código padrão da classe MainActivity incluiu um método onCreateOptionsMenu, o qual removemos porque não é usado neste aplicativo – vamos discutir onCreateOptionsMenu no Capítulo 5. Por toda esta seção, supomos que você criará os recursos de String necessários à medida que os encontrar nas descrições de código.

4.5.1 As instruções

package

e

import

A Figura 4.17 mostra as instruções package e import do aplicativo. A instrução package (inserida na linha 4 pelo IDE quando você criou o projeto) indica que a classe nesse arquivo faz parte do pacote com.deitel.twittersearches. As linhas 6 a 26 importam as classes e interfaces utilizadas pelo aplicativo.

6 import java.util.ArrayList;

1 // MainActivity.java

2 // Gerencia suas pesquisas favoritas no Twitter para

3 // facilitar o acesso e exibir no navegador Web do dispositivo

4 package com.deitel.twittersearches;

5

24 import android.widget.EditText;

25 import android.widget.ImageButton;

26 import android.widget.TextView;

27

Figura 4.17 Instruções package e import de MainActivity.

As linhas 6 e 7 importam as classes ArrayList e Collections do pacote java.util. Usamos a classe ArrayList para manter a lista de identificadores das pesquisas salvas e a classe Collections para ordená-los a fim de que apareçam em ordem alfabética. Das instruções import restantes, consideramos somente as dos recursos apresentados neste capítulo.

• A classe AlertDialog do pacote android.app (linha 9) é usada para exibir caixas de diálogo.

• A classe ListActivity do pacote android.app (linha 10) é a superclasse de MainAc- tivity, a qual fornece o componente ListView do aplicativo e os métodos para manipulá-lo.

• A classe Context do pacote android.content (linha 11) dá acesso às informações

sobre o ambiente no qual o aplicativo está sendo executado e permite usar vários serviços do Android. Vamos utilizar uma constante dessa classe quando ocultar- mos o teclado virtual via programação, depois que o usuário salvar uma pesquisa. • A classe DialogInterface do pacote android.content (linha 12) contém a interface

aninhada OnClickListener. Implementamos essa interface para tratar os eventos que

ocorrem quando o usuário toca em um botão em um componente AlertDialog. • A classe Intent do pacote android.content (linha 13) é usada para criar um ob-

jeto que especifica uma ação a ser executada e os dados utilizados nessa ação – o Android utiliza objetos Intent para ativar as atividades apropriadas. Vamos usar essa classe para ativar o navegador Web do dispositivo, para exibir os resultados da busca no Twitter e para exibir um selecionador de intenção a fim de que o usuário possa escolher como vai compartilhar uma pesquisa.

• A classe SharedPreferences do pacote android.content (linha 14) é usada para ma- nipular pares chave-valor persistentes que são armazenados em arquivos associados ao aplicativo.

• A classe Uri do pacote android.net (linha 15) permite converter uma URL para o

• A classe View do pacote android.view (linha 17) é utilizada em vários métodos de

tratamento de eventos para representar o componente da interface gráfica com que o usuário interagiu para iniciar um evento.

• A classe View contém o componente OnClickListener aninhado da interface (linha

18). Implementamos essa interface para tratar o evento disparado quando o usuá- rio toca no componente ImageButton para salvar uma pesquisa.

• A classe InputMethodManager do pacote android.view.inputmethod (linha 19) per-

mite ocultar o teclado virtual quando o usuário salva uma pesquisa.

• O pacote android.widget (linhas 20 a 26) contém os componentes da interface gráfica do usuário e layouts utilizados nas interfaces gráficas do Android. A classe

AdapterView (linha 20) é a classe base de ListView e é utilizada ao configurar o adaptador de ListView (o qual fornece os itens de ListView). A interface Adap- terView.OnItemClickListener (linha 21) é implementada para responder quando

o usuário toca em um item em um componente ListView. A interface Adapter- View.OnItemLongClickListener (linha 22) é implementada para responder quando

o usuário faz um pressionamento longo em um item em um componente ListView. A classe ArrayAdapter (linha 23) é usada para vincular itens a um componente Lis- tView. A classe ImageButton (linha 25) representa um botão que exibe uma imagem.

4.5.2 Extensão de

ListActivity

MainActivity (Figs. 4.18 a 4.27) é a única classe Activity do aplicativo Twitter Searches.

Quando você criou o projeto TwitterSearches, o IDE gerou MainActivity como uma sub- classe de Activity e forneceu a “casca” de um método sobrescrito onCreate, o qual toda sub- classe de Activitydeve sobrescrever. Mudamos a superclasse para ListActivity (Fig. 4.18, linha 28). Quando essa alteração é feita, o IDE não reconhece a classe ListActivity, de modo que é preciso atualizar suas instruções import. No IDE, você pode usar Source > Or- ganize Imports para isso. O Eclipse sublinha todo nome de classe ou interface que não reco-

nhece. Nesse caso, se você deixar o mouse uns instantes sobre o nome da classe ou interface, aparecerá uma lista de correções rápidas. Se o IDE reconhecer o nome, irá sugerir a instrução import ausente que precisa ser adicionada – basta clicar no nome para adicioná-la.

28 public class MainActivity extends ListActivity

29 {

Figura 4.18 A classe MainActivity é uma subclasse de ListActivity.

4.5.3 Campos da classe

MainActivity

A Figura 4.19 contém as variáveis estáticas e de instância da classe MainActivity. A cons- tante StringSEARCHES (linha 31) representa o nome do arquivo que vai armazenar as pes- quisas no dispositivo. As linhas 33 e 34 declaram os componentes EditText que vamos usar para acessar as consultas e identificadores digitados pelo usuário. A linha 35 declara a variável de instância savedSearches de SharedPreferences, a qual será usada para ma- nipular os pares chave-valor que representam as pesquisas salvas do usuário. A linha 36 declara o elemento ArrayList<String> que vai armazenar os nomes de identificador or- denados das pesquisas do usuário. A linha 37 declara o elemento ArrayAdapter<String> que utiliza o conteúdo de ArrayList<String> como origem dos itens exibidos no com- ponente ListView de MainActivity.

Figura 4.19 Campos da classe MainActivity.

4.5.4 Sobrescrevendo o método

onCreate

de

Activity

O método onCreate (Fig. 4.20) é chamado pelo sistema: • quando o aplicativo é carregado;

• se o processo do aplicativo tiver sido eliminado pelo sistema operacional enquanto o aplicativo estava em segundo plano e, então, é restaurado;

• sempre que a configuração é modificada, como quando o usuário gira o dispositi- vo ou quando abre ou fecha um teclado físico.

O método inicializa as variáveis de instância de Activity e componentes da interface gráfica do usuário – o mantemos simples para que o aplicativo seja carregado rapida- mente. A linha 43 realiza a chamada exigida para o método onCreate da superclasse. Como no aplicativo anterior, a chamada para setContentView (linha 44) passa a constante R.layout.activity_main para inflar a interface gráfica do usuário de activity_main.xml.

39 // chamado quando MainActivity é criada

40 @Override