Динамический AutocompleteTextView с ArrayAdapter и TextWatcher - PullRequest
5 голосов
/ 18 сентября 2011

Я пытаюсь динамически обновлять список AutocompleteTextView, используя ArrayAdapter. Чтобы обновить это представление, я использую TextWatcher для мониторинга любых изменений, которые могут произойти в AutocompleteTextView.

Проблема в том, что список вообще не обновляется, и я не могу понять, почему. Я искал что-то подобное в Интернете, и я нашел несколько разных подходов, но все же я не могу понять, почему этот, который должен быть самым простым, не работает. Любое объяснение будет высоко ценится.

Target AVD: API Google уровня 10, Android 2.3.3

Вот упрощенный код:

public class AutocompleteActivity extends Activity implements TextWatcher {
    ArrayAdapter<String> adapter = null;
    AutoCompleteTextView acTextView = null;
    ArrayList<String> addresses = new ArrayList<String>();

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.autocompleteview);

        acTextView = (AutoCompleteTextView) findViewById(R.id.autocomplete_address);
        adapter = new ArrayAdapter<String>(this, R.layout.listitem, addresses);
        adapter.setNotifyOnChange(true);
        acTextView.addTextChangedListener(this);
        acTextView.setAdapter(adapter);
    }

    @Override
    public void onTextChanged(CharSequence text, int start, int before, int after) {
        try {
            adapter.add("test");
        }
        catch (Exception e) {
            e.printStackTrace();
        }
    }

1 Ответ

3 голосов
/ 13 октября 2011

В вашем исходном коде TextWatcher поставляется в AutoCompleteTextView, это реальная проблема.

Если вы посмотрите на исходный код AutoCompleteTextView, вы обнаружите, что AutoCompleteTextView имеет свой собственный TextWatcher с именем «MyWatcher».Из-за этого AutoCompleteTextView не может ответить на ваше действие при наборе текста.

...