android – activity · activity representa a tela de uma aplicação classe filha da classe...

30
Android – Activity Ivan Nicoli

Upload: others

Post on 04-Feb-2020

24 views

Category:

Documents


0 download

TRANSCRIPT

Android – Activity

Ivan Nicoli

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.

Fim