У меня есть операция с полем автозаполнения. Всякий раз, когда текст изменяется, я хочу вызвать веб-службу и заполнить ArrayAdapter новой строкой []. Эта часть работает отлично, за исключением того, что в пользовательском интерфейсе список обновляется, когда в String [] школах есть все новые значения. Исходный список, заполненный в моем onCreate, всегда остается.Обновите ArrayAdapter динамически
Я прочитал где-то, что мне нужно было обновить в том же потоке, на котором работает пользовательский интерфейс, поэтому я попробовал Runnable, указанный в моем коде ниже. Но это, а также просто обновление моих классов переменных школ не работает вместе с notifyOnDataSetChange()
Где я иду не так?
@Override
public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
schools = SchoolProxy.search("Co");
autoCompleteAdapter = new ArrayAdapter(this,android.R.layout.simple_dropdown_item_1line, schools);
autoComplete = (AutoCompleteTextView) findViewById(R.id.edit);
autoComplete.addTextChangedListener(textChecker);
autoComplete.setAdapter(autoCompleteAdapter);
}
...
....
...
final TextWatcher textChecker = 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)
{
schools = SchoolProxy.search(s.toString());
runOnUiThread(updateAdapter);
}
};
private Runnable updateAdapter = new Runnable() {
public void run() {
autoCompleteAdapter.notifyDataSetChanged();
}
};
В качестве менее важного примечания стороны, если каждый пункт в школах имеет имя \ n город, штат. Возможно ли, чтобы город & находился на второй линии в автоматическом выпадающем списке? Только для форматирования. Если бы я мог, выглядел бы более чистым.
Спасибо!
Я буду стараться добавлять верным способом сегодня. Если это не сработает, я попробую очистить адаптер, а затем прокрутить строку и добавить элементы отдельно (надеюсь, это не решение). Но я расскажу о своих выводах и соглашусь, если вы правы. – Nathan
Я собираюсь идти вперед и предположить, что мне нужно очистить(), затем использовать либо add(), либо insert(). У меня была настройка данных как String []. Но я собираюсь экспериментировать, просто возвращая все это как JSONArray и выполняя цикл. Похожий: школы = SchoolProxy.search (s.toString()); для (int i = 0; i
Nathan