GUJ Discussões   :   últimos tópicos   |   categorias   |   GUJ Respostas

Spinner com campo de pesquisa

Pessoal,

Preciso implementar no meu app um Spinner. Mas quando o usuário clicar nele, teria que ter também um EditText para o usuário ir digitando e pesquisar os itens dentro do Spinner. Seria uma mescla de AutoComplete com Spinner. Alguém sabe ou tem algum exemplo pra compartilhar?

Valeu

Você tem que usar um EditText para deixar o usuário entrar caracteres e baseado na regra que você implementar, à medida em que ele digitar, você implementará um loop para percorrer cada item do Spinner e caso coincida com as iniciais, aí pode usar coincidência sensitiva ou não, para deixar dentro do Spinner as opções com as mesmas iniciais. Este exemplo que dei serve para deixar a lista de acordo com o que for digitado, mas se precisar de um autocomplete no próprio EditText, então teria que ser com estes mesmos conceitos, mas para inserir o resultado no EditText.
Para o primeiro caso, terá que usar algumas estruturas a mais, como ArrayAdapter.
Um exemplo:
this.auxCidade.addTextChangedListener(new TextWatcher() {
@Override
public void beforeTextChanged(CharSequence s, int start, int count, int after) {

        }

        @Override
        public void onTextChanged(CharSequence s, int start, int before, int count) {

        }

        @Override
        public void afterTextChanged(Editable s) {
            Log.e("afterTextChange", "entrou");
            if (s.length() >= 3) {
                EditCreateDataUser.spinner.setVisibility(View.VISIBLE);
                Adapter adapter = EditCreateDataUser.cidade.getAdapter();
                ArrayAdapter<String> spinnerAdapter = new ArrayAdapter<String>
                        (getActivity(), android.R.layout
                                .simple_spinner_item, android.R.id.text1);
                spinnerAdapter.setDropDownViewResource(android.R.layout
                        .simple_spinner_dropdown_item);
                int countAdapter = 0;
                if (adapter != null) countAdapter = adapter.getCount();
                for (int i = 0; i < countAdapter; i++) {
                    if (adapter.getItem(i).toString().toUpperCase().startsWith(s.toString().toUpperCase())) {
                        spinnerAdapter.add(adapter.getItem(i).toString());
                        Log.e("cidade", EditCreateDataUser.cidade.getItemAtPosition(i).toString()
                                + ", index: " + i);
                        Log.e("itemselecionado", EditCreateDataUser.cidade.getSelectedItem().toString());
                        EditCreateDataUser.cidade.setSelection(i);
                    }
                }
                if (spinnerAdapter.getCount() > 0) {
                    EditCreateDataUser.cidade.setAdapter(spinnerAdapter);
                }
                EditCreateDataUser.spinner.setVisibility(View.INVISIBLE);
            } else {
                EditCreateDataUser.cidade.setAdapter((SpinnerAdapter) EditCreateDataUser.citiesAdapter);
            }
        }
    });

Neste caso, spinner é um ProgressBar no formato de spinner e o Spinner é o EditCreateDataUser.cidade.

//