quinta-feira, 2 de fevereiro de 2012

Criando uma AutoCompleteTextView customizada

Primeiramente crie uma classe model, por exemplo, País:
class Pais {
     String nome;
     int bandeira;
     public Pais(String nome, int band){
      this.nome=nome;
      this.bandeira=band;
     }
  
     @Override
     public String toString() {
      return nome;
     }
     
    }

Depois é necessário criar uma classe que extenda ArrayAdapter e sobrescrever seu método getView:
class PaisAdapter extends ArrayAdapter< Pais> {
    
     public PaisAdapter(Context context, int resource, List< Pais> objects) {
   super(context, resource, objects);
     }

  @Override
  public View getView(int position, View convertView, ViewGroup parent) {
   LayoutInflater inflater = (LayoutInflater) TesteServiceActivity.this.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
   View v = inflater.inflate(R.layout.list_item, null);

   ImageView img = ((ImageView) v.findViewById(R.id.imagemmm));
   img.setImageDrawable( getResources().getDrawable(getItem(position).bandeira) );
   
   TextView txt = ((TextView) v.findViewById(R.id.ronaldo));
   txt.setText(getItem(position).nome);
   
   return v;
  }
     
  
     
    }

Por último, o método OnCreate da sua activity:

@Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        
        //Pega o AutoCompleteTextView
        AutoCompleteTextView textView = (AutoCompleteTextView) findViewById(R.id.autoCompleteTextView1);
     
        //Cria uma Lista de objetos Pais
        List< Pais> paises = new ArrayList< TesteServiceActivity.Pais>();
        paises.add(new Pais("Argentina", R.drawable.argentina));
        paises.add(new Pais("Paraguai", R.drawable.paraguai));
        paises.add(new Pais("Argélia", R.drawable.uruguai));
        
        //Instancia o PaisAdapter
        PaisAdapter adapter = new PaisAdapter(this, R.layout.list_item, paises);
        textView.setAdapter(adapter);
     
    }
Screenshots:

7 comentários:

  1. Não funciona no meu. Ele diz: No enclosing instance of the type MainActivity is accessible in scope
    Como fazer para consertar isso?

    ResponderExcluir
  2. Ele não reconhece de jeito nenhum a linha:

    LayoutInflater inflater = (LayoutInflater) MainActivity.this.getSystemService(Context.LAYOUT_INFLATER_SERVICE);

    ResponderExcluir
    Respostas
    1. Amigo, troque a "MainActivity" pela sua própria Activity. "MainActivity" é a activity usada no meu projeto =)

      Excluir
    2. No seu ta teste alguma coisa, no meu ta mainactivity. Mas ele não reconhece...

      Excluir
    3. você criou todas as classes dentro da sua Activity? Ou em classes separadas dentro do mesmo pacote?

      Excluir
    4. No meu teste o PaisAdapter está dentro do escopo da "TesteAcitivity" (no seu caso, MainActivity).

      Excluir