Sobre a classe BaseAdapter

Oi gente,

Postei 2 classes , postei a segunda para que se entenda melhor os acontecimentos, a dúvida é na primeira classe:

  1. Qual a utilidade do método public int getCount() ? Ele está me parecendo meio inútil aqui, a não ser pela sua obrigatoriedade de implementação.

  2. Como exatamente os argumentos chegam aos métodos Object getItem(int posicao) e long getItemId(int posicao) ? E quem os chama? Aliás, quem chama todos os métodos dessa classe (exceto o construtor), é o sistema, automaticamente?

Obrigada desde já, desculpa enxer tanto o saco de vcs… rs

package br.livro.android.cap6.layout;

import android.content.Context;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.ImageView;

/**
 * Adaptador de imagem para os exemplos de GridView, Gallery e ImageSwitcher
 * 
 * @author ricardo
 * 
 */
public class AdaptadorImagem extends BaseAdapter {
	private Context ctx;
	private final int[] imagens;
	private final android.view.ViewGroup.LayoutParams params;

	public AdaptadorImagem(Context c, int[] imagens, android.view.ViewGroup.LayoutParams params) {
		this.ctx = c;
		this.imagens = imagens;
		this.params = params;
	}

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

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

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

	public View getView(int posicao, View convertView, ViewGroup parent) {
		ImageView img = new ImageView(ctx);
		img.setImageResource(imagens[posicao]);
		img.setAdjustViewBounds(true);
		// i.setLayoutParams(new Gallery.LayoutParams(LayoutParams.WRAP_CONTENT,
		// LayoutParams.WRAP_CONTENT));
		img.setLayoutParams(params);
		return img;
	}

}
package br.livro.android.cap6.layout;

import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.widget.AdapterView;
import android.widget.GridView;
import android.widget.Toast;
import android.widget.AdapterView.OnItemClickListener;
import br.livro.android.cap6.R;

/**
 * Exemplo do GridView para visualizar imagens
 * 
 * @author rlecheta
 * 
 */
public class ExemploGridView extends Activity {
	// array com os ids das imagens
	private int[] imagens = { R.drawable.smile1, R.drawable.smile2,
			R.drawable.smile1, R.drawable.smile2, R.drawable.smile1,
			R.drawable.smile2, R.drawable.smile1, R.drawable.smile2 };

	@Override
	public void onCreate(Bundle icicle) {
		super.onCreate(icicle);
		setContentView(R.layout.exemplo_grid);

		GridView grid = (GridView) findViewById(R.id.grid1);
		grid.setAdapter(new AdaptadorImagem(this, imagens,new GridView.LayoutParams(30, 30)));

		grid.setOnItemClickListener(new OnItemClickListener() {
			public void onItemClick(AdapterView parent, View v, int posicao,long id) {
				Toast.makeText(ExemploGridView.this,"Imagem selecionada: " + posicao, Toast.LENGTH_SHORT).show();
			}
		});
	}
}
  1. O getCount é chamado internamente pelo componente que ira usar o adapter para mostrar o conteudo.

  2. Com o BaseAdapter parece meio inutil, mas se voce extender outro Adapter como o ArrayAdapter, voce pode usar esses métodos no getView.

no 1) você tá falando do objeto GridView?

Quem envia o argumento int posicao para o método View getView?

Sim, o GridView mesmo, ou tambem o ListView, Gallery e mais um monte de componente que depende de Adapters.

O GridView usa o getCount para saber quantos filhos ele tem, e passa cada indice para o getView.

Entendi, obrigada Marky :slight_smile: !

Essa parte do código de uma das classes acima entre os parênteses de setOnItemClickListener é uma classe interna?

E new OnItemClickListener(), o que é exatamente em relação ao que está entre chaves?

grid.setOnItemClickListener(new OnItemClickListener() {  
            public void onItemClick(AdapterView parent, View v, int posicao,long id) {  
                Toast.makeText(ExemploGridView.this,"Imagem selecionada: " + posicao, Toast.LENGTH_SHORT).show();  
            }  
        });

Sim isso é uma classe interna.

Essa é só a interface para ouvir os eventos de clique.

Entendido, obrigada Marky :slight_smile:

[Resolvido]