Criar Adapters para sua ListView e GridView I

Um problema que nós sempre enfretamos é lidar com imagens em listas. Parece um tanto quanto difícil encarando de uma perspectiva mais distante, porém usando essa aproximação de Adapter, torna-se fácil e eficiente lidar com listas!

Toda lista, é preenchida através de um adapter. A própria API fornece alguns adapters como o SimpleAdapter. Porém para lidar com imagens, é necessário que você faça o seu Adapter, personalizado e do jeitinho que você quer.

vamos então criar um adapter!


/**
* Classe que monta o adapter que será utilizado pela listview para gerar a lista de imagens
* @author Renato Porto Puccini
* */
public class ListMapAdapter extends BaseAdapter {
// Layout inflater
private LayoutInflater mInflater;

private Bitmap[] Icon;//Array de Imagens/Bitmaps

private String[] arrayTitulos; //Array com titulo das imagens para serem exibidos

/**
* Método construtor que recebe o Contexto, o array de titulos e os nomes das imagens na app
* @param contexto em que se encontra ao ser chamado
* @param array com o nome das imagens
* @param array com os titulos das imagens (para serem exibidos bunitinhu pro usuario)
* */
public ListMapAdapter(Context contexto, String[] Icons, String[] array) {
mInflater = LayoutInflater.from(contexto);
this.Icon = new Bitmap[Icons.length];
this.arrayTitulos= array;

//nesse caso eu pego as imagens dos resources que estão na pasta /res com aquele nome. No meu caso eu tenho uma serie de imagens diferentes a serem exibidas
for (int j = 0; j < arrayTitulos.length; j++) {
this.Icon[j] = BitmapFactory.decodeResource(contexto.getResources(), contexto.getResources().getIdentifier("drawable/map_icon_"+Icons[j].trim(),null    ,contexto.getPackageName()));
}

}

public int getCount() {
return arrayTitulos.length;
}

public Object getItem(int position) {
return position;
}

public long getItemId(int position) {
return position;
}

public View getView(int position, View convertView, ViewGroup parent) {
ViewHolder holder;
//Se a sua view for ==null, então você instacia os objetos de acordo com seu layout .xml
if(convertView==null){
convertView= mInflater.inflate(R.layout.seuArquivoXML, null);
holder = new ViewHolder();
holder.icone = (ImageView)convertView.findViewById(R.id.imageViewIcon);
holder.titulo= (TextView)convertView.findViewById(R.id.textViewTitle);
convertView.setTag(holder);
}else{
// pega a view de volta. Isso é um acesso rápido a ela. e vc traz seu textview e imageview
holder = (ViewHolder)convertView.getTag();
}
// Agora você atribui seus dados(imagens e textos) nas suas views. Usando esse Holder é mais eficiente
holder.icone.setImageBitmap(Icon[position]);
holder.titulo.setText(this.arrayTitulos[position]);

return convertView;
}

/**
* O ViewHolder é uma classe que armazena a estrutura em tags, e retorna as views por getView().<br>
* Essa estrutura de dados faz referencia para os objetos que vc quer atribuir valores.
* Além de fazer com que você evite de ficar chamando o método findViewById() toda vez que getView() é invocado
* Reference List14 developer.android.com
* */
static class ViewHolder{
ImageView icone;
TextView titulo;
}

}

Ok. Agora você estar se perguntando, de onde eu pego esses TextView´s e ImageView´s ?

Você tem que criar um lista.xml . Esse .xml terá as suas views que vocÊ precisará para gera a sua lista..

No meu caso, como usei dois, ficou curtinho, mais ou menso assim


<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
>
<ImageView android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/imageViewIcon"
android:layout_gravity="center_horizontal"
/>

<TextView android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/textViewTitle"
android:textColor="#000000"
android:textStyle="italic"
/>

</LinearLayout>

Simples assim, seu adapter foi criado!

P.S. Se você for pegar as imagens da web, de uma olhada nesse link! https://renatopuccinipt.wordpress.com/2011/08/12/converter-string-em-imagem/

Se post foi util pra voce, da um Google+1 !!!

😀

Anúncios

Sobre renatopuccini
Android Developer. Passion for what I do!

One Response to Criar Adapters para sua ListView e GridView I

  1. Pingback: Criar Adapters para ListView e GridView part II « Você Sabia…?

Deixe um comentário

Preencha os seus dados abaixo ou clique em um ícone para log in:

Logotipo do WordPress.com

Você está comentando utilizando sua conta WordPress.com. Sair / Alterar )

Imagem do Twitter

Você está comentando utilizando sua conta Twitter. Sair / Alterar )

Foto do Facebook

Você está comentando utilizando sua conta Facebook. Sair / Alterar )

Foto do Google+

Você está comentando utilizando sua conta Google+. Sair / Alterar )

Conectando a %s

%d blogueiros gostam disto: