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.