Caso prefira, você encontrará todo esse material, em inglês, no site do Developer Android. A tradução e comentários dos materiais eu faço livremente para ajudar a comunidade que fala português.

domingo, 20 de março de 2011

Interface de Usuários - Fazendo o bind de dados com AdapterView

Pessoal, desculpe pelo meu sumiço. Eu achava que estava bem e resolvi que podia fazer tudo como se estivesse 100%. Não estava e tive uma recaída. Com dengue não se brinca. Ela se parece com uma gripe comum (mais forte, no entanto) mas não é. Se tiverem a infelicidade de pegar dengue, fiquem de repouso mesmo e não vacilem como eu, ok?

--

O AdapterView é uma subclasse do tipo ViewGroup cujas View filhas são determinadas por um Adapter que faz o bind de dados de algum repositório. O AdapterView é útil onde quer que você precise mostrar dados que estão guardados em bancos de dados dentro da sua interface.

Gallery, ListView e Spinner são exemplos de subclasses AdapterView que você pode usar para fazer o bind a partir de dados.

Os objetos AdapterView têm duas responsabilidades principais:

  • Preencher o layout com dados
  • Gerenciar as seleções de usuário
Preencher o layout com dados

Inserir dados em um layout é tipicamente alcançado fazendo o binding de uma classe AdapterView a um Adapter, que retorna dados de uma fonte externa (talvez uma lista de fornecedores ou o resultado de uma query a partir do banco de dados do dispositivo).

O código abaixo faz o seguinte:
  1. Cria um Spinner com uma View existente e faz o bind para um novo ArrayAdapter que lê uma array de cores do recurso local.
  2. Cria um outro Spinner a partir de uma View e faz o bind para um novo SimpleCursosAdapter que vai ler os nomes das pessoas dos contatos do dispositivo (ver depois Contacts.People).
// Pega o Spinner e faz o bind para um ArrayAdapter
// que referencia uma array de String

Spinner s1 = (Spinner) findViewById(R.id.spinner1);
ArrayAdapter adapter = ArrayAdapter.createFromResource(
    this, R.array.colors, android.R.layout.simple_spinner_item);
 
adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
s1.setAdapter(adapter);
 
// Carrega um Spinner e faz o bind para uma query
private static String[] PROJECTION = new String[] {
        People._ID, People.NAME
    };
 
Spinner s2 = (Spinner) findViewById(R.id.spinner2);
Cursor cur = managedQuery(People.CONTENT_URI, PROJECTION, null, null);
   
SimpleCursorAdapter adapter2 = new SimpleCursorAdapter(this,
    android.R.layout.simple_spinner_item, // Use um template
                                                                   // que mostra um
                                                                   // text view

    cur, // Dá ao cursos ao list adapter
    new String[] {People.NAME}, // Mapeia a coluna NAME do banco
    new int[] {android.R.id.text1}); // A view "text1" definida no XML
                                       
adapter2.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
s2.setAdapter(adapter2);
Note que é necessário ter uma coluna People._ID em projeção usada no CursorAdapter ou você terá uma exceção.

Se, durante o curso da vida da aplicação, você mudar os dados que foi lido pelo seu Adapter, você deverá chamar notifyDataSetChanged(). Isso vai notificar as Views anexadas que os dados foram modificados e que elas deverão se atualizar.

Gerenciar as seleções de usuário

Você gerencia a seleção do usuário setando o membro AdapterView.OnItemClickListener para um listener e capturando as mudanças de seleção.
// Cria uma mensagem de handle para uma classe anônima
private OnItemClickListener mMessageClickedHandler = new OnItemClickListener() {
    public void onItemClick(AdapterView parent, View v, int position, long id)
    {
        // Mostra uma messageBox.
        Toast.makeText(mContext,"You've got an event",Toast.LENGTH_SHORT).show();
    }
};
// Agora pega o seu objeto e seta o membro onItemClickListener
// para que nossa classe possa gerenciar o objeto
mHistoryView = (ListView)findViewById(R.id.history);
mHistoryView.setOnItemClickListener(mMessageClickedHandler); 

2 comentários:

RefereeTip Manager disse...

Olá.

Encontrei seu site numa pesquisa pelo google e achei que o seu conteúdo é de grande qualidade.

Parabéns... Já estive a ler todos os seu artigos.

Gostava de lhe fazer uma pergunta.

Eu neste momento gostaria de fazer uma aplicação para mim e posteriormente, caso desse resultado talvez coloca-la no market.

O que pretendo fazer é uma pequena aplicação que sempre que for iniciada faça uma sincronização com o meu site (www.refereetip.com) e caso existam novas noticias essas sejam passadas para o smartphone.

Acham que é difícil fazer uma aplicação deste género.
Existe uma aplicação deste género, podem ver neste link https://market.android.com/details?id=com.genwi.proreferee&feature=search_result

De inicio não precisa de ser tão complexa, para já apenas queria sincronizar as noticias.


Será que me pode ajudar com algumas dicas... Eu penso que para isto funcionar tenho de usar a API do blogger, certo??

Aguardo resposta...

ab

Leonardo Nakahara disse...

Bom dia RefereeTip Manager. Obrigado por visitar o blog. Pelo que entendi do app que você quer criar, ele servirá como um leitor de notícias que deverá mostrar os posts do seu site, certo?

Eu baixei o app que você colocou como exemplo e foi isso que entendi dele.

Eu entendo que não é difícil fazer esse tipo de aplicação. Eu mesmo não sou o expert - ainda - já que também estou aprendendo Android.

No entanto, você não se precisará, pelo que percebo, acessar a API do Blogger. No seu site você já tem o serviço de RSS implantado (http://refereetip.blogspot.com/feeds/posts/default).

Se você usar qualquer programa leitor de RSS (ou mesmo o reader.google.com) verá que apontando para o endereço fornecido pelo RSS no seu blog, terá acesso a todas as informações.

Essa é a funcionalidade que entendi que você deseja, certo?

O seu app deverá apenas apontar para o seu RSS. Dai a formatação é mais fácil, já que o conteúdo você já terá.

Abraço! Espero ter ajudado! =D

Portions of this page are modifications based on work created and shared by the Android Open Source Project and used according to terms described in the Creative Commons 2.5 Attribution License.
Related Posts Plugin for WordPress, Blogger...