Android: ListActivity и сортировка ArrayAdapter перед отображением списка

#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 в данном конкретном случае.