Может кто-нибудь помочь мне исправить этот код? - PullRequest
1 голос
/ 01 ноября 2010

Я получаю сообщение об ошибке в adapter.getFilter (). Filter (s) в функции onTextChanged (). Я следил за этим - Как динамически обновлять ListView на Android - чтобы создать фильтруемый список в диалоге.

public class CustomizeDialog extends Dialog implements OnClickListener {

private final String[] cityList = {"Seattle", "London"}; private EditText filterText = null;
ArrayAdapter<String> adapter = null;

public CustomizeDialog(Context context) {
    super(context);

    /** Design the dialog in main.xml file */

    setContentView(R.layout.main);
    filterText = (EditText) findViewById(R.id.EditBox);
    filterText.addTextChangedListener(filterTextWatcher);

    this.setTitle("Select");
    list = (ListView) findViewById(R.id.List);
    list.setAdapter(new ArrayAdapter<String>(context, android.R.layout.simple_list_item_1, cityList));
}

@Override
public void onClick(View v) {
    /** When OK Button is clicked, dismiss the dialog */
}
private TextWatcher filterTextWatcher = new TextWatcher() {

    public void afterTextChanged(Editable s) {
    }

    public void beforeTextChanged(CharSequence s, int start, int count,
            int after) {
    }

    public void onTextChanged(CharSequence s, int start, int before,
            int count) {
        adapter.getFilter().filter(s);
    }
};
}

1 Ответ

1 голос
/ 01 ноября 2010

Вы не инициализируете adapter члена вашего класса.

Попробуйте изменить:

list.setAdapter(new ArrayAdapter<String>(context, android.R.layout.simple_list_item_1, cityList));

до:

adapter = new ArrayAdapter<String>(context, android.R.layout.simple_list_item_1, cityList);
list.setAdapter(adapter);

Часть этой статьи гласит:

Оказывается, это довольно легко. Чтобы выполнить быстрый тест, добавьте эту строку в ваш onCreate() вызов

adapter.getFilter().filter(s);

Обратите внимание, что вам нужно сохранить ListAdapter в переменной, чтобы сделать эту работу - я сохранил свой ArrayAdapter<String> от ранее в переменную 'adapter'.

Хотя это вводит в заблуждение, поскольку опубликованный код не отражает это изменение.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...