Возможно, у Android есть панель поиска для ListView, так что когда панель поиска коснется клавиатуры, и когда текст вводится в строку поиска, отображаются элементы, которые соответствуют в ListView?
Мне действительно нужна панель поиска, которая вызывает клавиатуру.
Update:
Я добавил поле EditText, которое вызывает клавиатуру, и я могу ввести в поле EditText. Я хочу, чтобы первые несколько символов элементов в списке, показанных в ListView, соответствовали символам, введенным в окно EditText.
Я пробовал следовать приведенному здесь подходу ListView Filter, но я немного запутался относительно того, сколько фильтрации уже сделано в ListView?
1) Нужно ли создавать отдельный массив, в котором хранятся значения, соответствующие тексту, введенному в EditText? Из этого сообщения Call adapter.notifyDataSetChanged, похоже, что ListView уже имеет теневой массив для этого, и он обновляется, когда adapter.notifyDataSetChanged(); называется.
2) Мне нужно вызвать adapter.notifyDataSetChanged(); обновить ListView после ввода некоторого текста в окне EditText?
3) Нужно ли расширять ListActivity, как это указано в сообщении ? Если да, то каким образом я могу расширить свой класс активности, если класс активности уже расширяется из основного действия?
4) В настоящее время у меня есть следующее:
ArrayAdapter<String> adapter = null;
private EditText filterText = null;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.symptom);
ListView symptomList = (ListView) findViewById(R.id.ListView_Symptom);
symptomList.setTextFilterEnabled(true);
symptomList.setFastScrollEnabled(true);
filterText = (EditText) findViewById(R.id.search_box);
filterText.addTextChangedListener(filterTextWatcher);
adapter = new ArrayAdapter<String>(this, R.layout.menu_item, symptomsArray);
symptomList.setAdapter(adapter);
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);
adapter.notifyDataSetChanged();
}
};
К сожалению, в тот момент, когда я печатаю в поле EditText, я получаю исключение NullPointer в
Thread [<7> Filter] (Suspended (exception NullPointerException))
ArrayAdapter$ArrayFilter.performFiltering(CharSequence) line: 437
Filter$RequestHandler.handleMessage(Message) line: 234
Filter$RequestHandler(Handler).dispatchMessage(Message) line: 99
Looper.loop() line: 123
HandlerThread.run() line: 60
Любая идея, что мне не хватает?