#android #multithreading
#Android #многопоточность
Вопрос:
У меня есть ListActivity, в котором есть ArrayAdapter и фильтр. Я хочу заполнить элементы ArrayAdapter, отфильтровать результаты, а затем отобразить их. По какой-то причине происходит какая-то причудливая обработка потоков, которая заставляет результат отображаться сначала без применения фильтра, а затем фильтрует. Таким образом, есть десятая доля секунды, когда вы можете увидеть неотфильтрованные результаты.
Запуск в потоке пользовательского интерфейса в режиме ListActivity
private Runnable returnRes = new Runnable() {
public void run() {
if (promotionItems != null amp;amp; promotionItems.size() > 0) {
for (int i = 0; i < promotionItems.size(); i )
m_adapter.add(promotionItems.get(i));
}
m_adapter.getFilter().filter(filterString);
m_adapter.notifyDataSetChanged();
m_ProgressDialog.dismiss();
}
};
Комментарии:
1. Я думаю, вы могли бы в качестве альтернативы отфильтровать их за пределами адаптера, а затем передать их, как только они будут готовы. Я не уверен, почему изменения отображаются до того, как вы вызовете notifyDataSetChanged()
2. Не забывайте, что вы не можете изменять пользовательский интерфейс из другого потока. Возможно, проблема в вызове notifydatasetchanged в этом потоке. Пытаюсь использовать обработчик и обновить его.
Ответ №1:
Вы ознакомились с ArrayAdapter.setNotifyOnChange (логическое значение)? Похоже, это то, что вы хотите отключить перед добавлением любого из ваших элементов в ArrayAdapter в данном конкретном случае.