[Resolvido] Adapter Customizado - Como ele descobre o tamanho da lista?

Prezados,
Tudo bem?

Realizei o desenvolvimento de um exemplo do “Google Android - Novatec” onde criamos nosso próprio Adaptador para utilizar junto a nossa atividade que extende ListActivity.
O exemplo funcionou tudo certinho, porém me surgiu uma dúvida:

O que eu gostaria de saber é o que especifica exatamente quantas vezes o método getView do adaptador deve ser chamado.

Por quê em momento algum eu lembro de ter falado algo ao código como “Hey, adaptador! Essa aqui é minha lista e você deve criar uma view para cada elemento dela”.

Ou seja, gostaria de saber onde exatamente eu expecifico a frase “Hey, adaptador! Essa aqui é minha lista e você deve criar uma view para cada elemento dela”. para o adaptador saber quantas vezes ele deve executar o getView.

Desde já agradeço,
Abraços!!!

Segue código caso sirva para algo:

package com.diogoalmeidabarbosa;

import java.util.List;

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

public class SmileAdapter extends BaseAdapter {

	private Context context;
	private List<Smile> lista;

	public SmileAdapter(Context context, List<Smile> lista) {
		this.context = context;
		this.lista = lista;
	}

	@Override
	public int getCount() {
		return lista.size();
	}

	@Override
	public Object getItem(int position) {
		return lista.get(position);
	}

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

	@Override
	public View getView(int posicao, View convertView, ViewGroup parent) {

		Smile smile = lista.get(posicao);
		LayoutInflater inflater = (LayoutInflater) context
				.getSystemService(Context.LAYOUT_INFLATER_SERVICE);

		View v = inflater.inflate(R.layout.smile_detalhes, null);

		TextView textNome = (TextView) v.findViewById(R.id.nome);
		ImageView img = (ImageView) v.findViewById(R.id.img);

		textNome.setText(smile.getNome());
		img.setImageResource(smile.getImage());

		return v;

	}

}

Olá,

Não sei se entendi corretamente a sua pergunta, mas o código que você quer provavelmente está na sua Activity. O uso do seu Adapter customizado vai ser muito semelhante (se não igual) ao uso de um Adapter padrão do Android (ArrayAdapter por exemplo).
Na sua Activity você deve ter algo mais ou menos assim:

public class SuaActivity extends Activity {

    // ou onStart, ou onResume...
    onCreate(Bundle savedInstance) {
        // ...
        ListView listView = (ListView) findViewById(R.id.id_da_sua_list_view);
        
        // aqui você fala pra ele que essa é a sua lista
        SmileAdapter seuAdapter = new SmileAdapter(this, suaLista);

        listView.setAdapter(seuAdapter);
        // ...
    }
}

Era isso?

Abraço

Não, porém valew pela intenção :wink:

Vlw.

Você está pensando em problemas…“Não” há um problema, o código que postei funciona perfeitamente.

O que desejo saber é como o Adaptador faz para saber qual é minha lista, qual o tamanho dela e quantas vezes executar o método “getView()”.
Sacou?

Quem chama o getView são os componentes que voce usam que tem o conteudo baseado em um Adapter, como a Gallery e a ListView.
Voce coloca esses itens no layout da sua tela, e eles vão tentar paginar as Views do adapter com WRAP_CONTENT X WRAP_CONTENT.

O método getView vai ser chamado cada vez que o componente precisar de uma View para completar a visualização dentro do scroll. Ele vai ser chamado com valores entre 0 e getCount().

Mas, voce também pode interferir nisso e definir um tamanho para essas views do Adapter basta setar o LayoutParams da View.

Por exemplo, se voce for usar na Gallery :

 @Override  
    public View getView(int posicao, View convertView, ViewGroup parent) {  
  
        Smile smile = lista.get(posicao);  
        LayoutInflater inflater = (LayoutInflater) context  
                .getSystemService(Context.LAYOUT_INFLATER_SERVICE);  
  
        View v = inflater.inflate(R.layout.smile_detalhes, null);  
        //carrega estado da view
        v.setLayoutParams(new Gallery.LayoutParams(450,100));       
        return v;
    }  

Marky, valew!!!
Era exatamente isso que eu estava curioso pra saber "Ele vai ser chamado com valores entre 0 e getCount()."
Eu não entendia como meu componente sabia quantas vezes ele deveria chamar o getView.
Agora que você me falou, faz todo o sentido do mundo xDDD

Obrigado a todos pela atenção.

Por favor, evite dar tanto destaque para o óbvio no título dos seus tópicos. Use as tags informativas para coisas como [Resolvido], [Android], mas não para [Dúvida] ou [Ajuda].