android – activity · activity representa a tela de uma aplicação classe filha da classe...
TRANSCRIPT
Activity
● Representa a tela de uma aplicação● Classe filha da classe android.app.Activity● Deve ser declarada sempre no AndroidManifest.xml● Obrigatória a implementação do método
onCreate(Bundle) e neste método é obrigatória a chamada do método setContentView(View)
Navegação entre telas
● A navegação entre Activities (Telas) se dá por meio de um Intent.
● Existem dois métodos que permitem a chamada de novas Activities:
– startActivity(intent): Abre uma Activity de maneira independente.
– startActivityForResult(intent, codigo): Abre uma Activity aguardando um retorno
Exercício 1 – Navegação (1/4)
● Crie um novo projeto no Eclipse, parâmetros:– ProjectName: ExemplosActivity– Target: Google Apis (Plataform 2.2)– Package Name: br.edu.facear.exemplosactivity– Activity: Desmarque a opção de criação.
Exercício 1 – Navegação (2/4)
● Crie duas novas classes que herdam a classe Activity, com os nomes:
– Tela1Activity– Tela2Activity
● Adicione a declaração de ambas no AndroidManifest.xml
● Adicione o category do tipo LAUNCHER no Intent da Activity Tela1Activity.
Exercício 1 – Navegação (3/4)
● Na Activity Tela1Activity adicione a seguinte implementação do método onCreate(Bundle):
@Overridepublic void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);Button b = new Button(this);b.setText("Clique aqui para ir a próxima tela");b.setOnClickListener(this);setContentView(b);
}
● Faça com que a Activity implemente a Interface OnClickListener e adicione o seguinte método na mesma:
public void onClick(View arg0) {Intent i = new Intent(this,Tela2Activity.class);startActivity(i);
}
Exercício 1 – Navegação (4/4)
● Na Activity Tela2Activity adicione a seguinte implementação do método onCreate(Bundle):
@Overridepublic void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);TextView tv = new TextView(this);tv.setText("Olá, Seja bem Vindo!");setContentView(tv);
}
● Execute a aplicação.
Passagem de parâmetros entre Activities
● A passagem de parâmetros entre Activities é realizada por meio de um Objeto da classe android.os.Bundle
● Este objeto se comporta de maneira semelhante a uma HashMap do Java por meio do padrão "chave x valor".
● Para adicionar os parâmetros, são utilizados os métodos putString, putDouble, putInt, putBoolean, putChar, dentre outros...
Exercício 2 – Parâmetros (1/2)
● Altere o método onClick da classe Tela1Activity adicionando as linhas de passagem de parâmetros:
public void onClick(View arg0) {Intent i = new Intent(this, Tela2Activity.class);
Bundle b = new Bundle();b.putString("nome", "Ivan");i.putExtras(b);
startActivity(i);}
Exercício 2 – Parâmetros (2/2)
● Altere o método onCreate(Bundle) da classe Tela2Activity adicionando as linhas de obtenção de parâmetros:
@Overridepublic void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);TextView tv = new TextView(this);
Intent i = getIntent();tv.setText("Olá, seja bem vindo "+ i.getExtras().getString("nome"));
this.setContentView(tv);}
Passagem de Parâmetros 2
● Para simplificar o código é possível chamar o método putExtra(chave, tipo) diretamente do objeto que será passado para o método startActivity
● Da mesma maneira na Activity destino é possível chamar o Método getExtras<Tipo>(chave), para se obter o valor, exemplo:
– getIntent().getStringExtra("nome")
Exercício 3 – Parâmetros 2 (1/2)
● Altere o método onClick da classe Tela1Activity para simplificar a passagem de parâmetros:
public void onClick(View arg0) {Intent i = new Intent(this, Tela2Activity.class);
i.putExtra("nome", "Ivan");
startActivity(i);}
Exercício 3 – Parâmetros 2 (2/2)
● Altere o método onCreate(Bundle) da classe Tela2Activity para simplificar a obtenção de parâmetros:
@Overridepublic void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);TextView tv = new TextView(this);
tv.setText("Olá, seja bem vindo "+ getIntent().getStringExtra("nome"));
this.setContentView(tv);}
ListActivity – exibição de uma lista de itens na tela
● Subclasse da classe Activity.● Utilizada para simplificar a construção de telas com o
objetivo de exibir uma lista de itens.● Não é necessário chamar o método setContentView,
pois este já é chamado internamente.● É necessário chamar o método
setListAdapter(ListAdapter)● Possui métodos que facilitam a captura de eventos
bem como os elementos selecionados, é o caso do método onListItemClick()
Exercício 4 - Criando uma lista de Nomes
● Crie uma nova classe chamada ListNomesActivity que herde a classe android.app.ListActivity e adicione a seguinte implementação:
@Overrideprotected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
String[] nomes = new String[] {"Nome 1", "Nome 2", "Nome 3"};ArrayAdapter<String> arrayAdapter = new ArrayAdapter<String>(this,
android.R.layout.simple_list_item_1, nomes);setListAdapter(arrayAdapter);
}
@Overrideprotected void onListItemClick(ListView l, View v, int position, long id) {
super.onListItemClick(l, v, position, id);Toast.makeText(this, "Foi selecionado o item " + this.getListAdapter().getItem(position).toString(),
Toast.LENGTH_SHORT);}
Exercício 5 – Menu de Activities
● Crie uma nova classe que herde a classe ListActivity, chamada ListMenuActivity.
● Simplifique a declaração de Activities no AndroidManifest.xml, deixando-as no seguinte padrão:
– <activity android:name=".Tela1Activity"></activity>
● Crie um menu para cada uma das Activities: ListNomesActivity, Tela1Activity, Tela2Activity.
● Crie um elemento Sair: Quando chamado, a implementação deste elemento deve ser simplesmente a invocação do método finish() da classe Activity
SimpleCursorAdapter
● Assim como o ArrayAdapter o SimpleCursorAdapter é outra implementação da classe ListAdapter
● Pode ser associada a uma ActivityList se passado como parâmetro para o método setListAdapter.
● Mapea colunas de Cursor com um determinado elemento de um layout XML.
● Um Cursor é semelhante a um ResultSet do JDBC.● Utilizando-se da interface Cursor é possível percorrer
registros, como, por exemplo, a lista de contatos do celular ou o retorno de um banco de dados.
Exercício 6 – Acessando Contatos (1/2)
● Crie uma nova classe que herde a classe ListActivity, chamada ListaContatosActivity.
● Altere a classe MenuActivity para que seja possível abrir esta atividade.
● No arquivo AndroidManifest.xml, adicione a declaração:– <uses-permission android:name="android.permission.READ_CONTACTS"/>
● Copie o arquivo res/layout/main.xml e cole renomeando para res/layout/contatos.xml.
● Adicione o atributo android:id="@+id/nome" na tag TextView do arquivo res/layout/contatos.xml e remova o atributo android:text="@string/hello"
Exercício 6 – Acessando Contatos (2/2)
● Na classe ListaContatosActivity, adicione a seguinte implementação:
ListAdapter adapter;@Overrideprotected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);Uri uri = ContactsContract.Contacts.CONTENT_URI;Cursor c = getContentResolver().query(uri, null, null, null, null);startManagingCursor(c);String[] colunas = new String[] {ContactsContract.Contacts.DISPLAY_NAME};int[] campos = new int[] {R.id.nome};adapter = new SimpleCursorAdapter(this, R.layout.contatos, c, colunas, campos);setListAdapter(adapter);
}@Overrideprotected void onListItemClick(ListView l, View v, int position, long id) {
super.onListItemClick(l, v, position, id);Cursor c = (Cursor) adapter.getItem(position);String nomeColuna = ContactsContract.Contacts.DISPLAY_NAME;String nome = c.getString(c.getColumnIndexOrThrow(nomeColuna));Toast.makeText(this, "Contato Selecionado : " + nome, Toast.LENGTH_SHORT).show();
}
SimpleAdapter – Exibição de valores fixos em uma lista
● SimpleAdapter é outra implementação de um ListAdapter.
● O SimpleAdapter recebe como parâmetro uma lista java.util.List. Cada item da lista deve ser entendido como uma linha da View.
● Cada linha da Lista fornecida ao SimpleAdapter deve possuir um HashMap cujas chaves devem estar mapeadas com os “ids” dos componentes da tela.
SimpleAdapter – Exibição de valores fixos em uma lista
Chave1 → Valor1Chave2 → Valor2
Chave1 → Valor3Chave2 → Valor4
Chave1 → Valor5Chave2 → Valor6
java.util.List
java.util.HashMap
Chave1 → Nome1 XML
Nome1, Nome2Chave2 → Nome2
Exercício 7 – ListActivity com SimpleAdapter (1/2)
● Crie uma nova classe, chamada ListSimpleAdapterActivity que seja filha da classe ListActivity.
● Altere a classe MenuActivity para que seja possível abrir esta atividade.
● Adicione a nova atividade no arquivo AndroidManifest.xml
Exercício 7 – ListActivity com SimpleAdapter (1/2)
● Na implementação da classe ListSimpleAdapterActiviy, adicione:
@Overrideprotected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);ArrayList<HashMap<String,String>> list = new ArrayList<HashMap<String,String>>();for (int i = 0; i < 10; i++) {
HashMap<String, String> item = new HashMap<String, String>();item.put("nome", "Nome " + i);item.put("fone", "Fone " + i);list.add(item);
}String[] from = new String[] {"nome", "fone"};int[] to = new int[] {android.R.id.text1, android.R.id.text2};setListAdapter(new SimpleAdapter(this, list, android.R.layout.two_line_list_item, from, to));
}@Overrideprotected void onListItemClick(ListView l, View v, int position, long id) {
super.onListItemClick(l, v, position, id);Toast.makeText(this, "Você selecionou o elemento: " +
this.getListAdapter().getItem(position).toString(), Toast.LENGTH_SHORT).show();}
Exercício 8 – SimpleAdapter com XML customizado
● Crie uma classe chamada ListSimpleAdapter2Activity que seja filha da classe ListActivity
● Copie o arquivo res/layout/contatos.xml e cole renomeando para contatos_simple_adapter.xml
● Copie o TextView e cole duas vezes totalizando 3 componentes TextView.
● Adicione o atributo android:id="@+id/nome" no primeiro e android:id="@+id/fone" no último
● Remova o atributo android:id no TextView do meio e adicione o atributo android:text=" - "
● Altere o atributo android:orientation do LinearLayout para horizontal.
● Altere todas os atributos de TextView de android:layout_width="fill_parent" para android:layout_width="wrap_content"
● Implemente a classe ListSimpleAdapter2Activity de forma que funcione de forma semelhante a classe ListSimpleAdapterActivity
MapActivity
● Assim como a classe android.app.ListActivity a classe com.google.android.maps.MapActivity também é filha da classe Activity.
● Ela foi criada com o intuito de simplificar a criação de uma aplicação que se integra com o Google Maps.
● A criação de uma Activity que acessa o Google Maps difere em dois pontos da criação de uma Activity Normal:
– É necessário criar uma classe filha da classe MapActivity ao invés da classe Activity
– O método setContentView deve receber um MapView
Exercício 9 – Mapa Facear (1/3)
● Para utilizar o MapView é necessário utilizar um código do GoogleMaps que é obtido pelo md5 do certificado da aplicação.
● Para fins de desenvolvimento o Eclipse gera um certificado digital automaticamente (Não é possível publicar um aplicativo com este certificado no GooglePlay), para visualizá-lo acesse o diretório presente em Windows>Preferences>Android>Build
● Abra um prompt de comando e digite o comando: keytool -list -alias androiddebugkey -keystore <path_to_debug_keystore>.keystore -storepass android -keypass android
● Acesse o endereço: http://code.google.com/android/maps-api-signup.html
● Adicione seu Certificate fingerprint (MD5) e clique em Generate API KEY
Exercício 9 – Mapa Facear (2/3)
● Crie uma nova classe filha de MapActivity, adicione a seguinte implementação:
@Overrideprotected void onCreate(Bundle icicle) {
super.onCreate(icicle);MapView map = new MapView(this, "0wKikE_9QhXqX6w3nlDP71NU52m55LxDh50Bo4A");MapController mc = map.getController();mc.setZoom(20);double latitude = -25.538814*1E6;double longitude = -49.362275*1E6;GeoPoint point = new GeoPoint((int)latitude, (int)longitude);mc.setCenter(point);map.setSatellite(true);map.setClickable(true);this.setContentView(map);
}
Exercício 9 – Mapa Facear (3/3)
● No arquivo AndroidManifest.xml, adicione, dentro da tag <application> a entrada:
– <uses-library android:name="com.google.android.maps"/>
● No mesmo arquivo, dentro da tag <manifest>, adicione a entrada:
– <uses-permission android:name="android.permission.INTERNET"/>
● Tome as demais medidas de forma que a Activity se torne funcional
Exercício 10 – Torre Eiffel
● Crie um MapActivity, utilizando a sugestão do gerador de códigos do GoogleMaps:
<com.google.android.maps.MapView android:layout_width="fill_parent" android:layout_height="fill_parent" android:apiKey="0wKikE_9QhXqX6w3nlDP71NU52m55LxDh50Bo4A" />
● Que traga a imagem da Torre Eiffel.