#android
#Android
Вопрос:
Я работаю на TabHost с 4 tabwidget, у моего виджета all four tab есть ListActivity, который показывает список элементов из разных объектов arraylist, установленных из классов компонентов синтаксического анализа Json..
Сейчас приложение работает в режиме f9, но,,, примерно в соотношении 5 к 1 показывает исключение, что мой адаптер сброшен, но ListView не может отображать данные, поскольку адаптер установлен из фонового потока.
Я не могу предоставить данные адаптера из того же потока пользовательского интерфейса, потому что мои классы компонентов и диспетчер данных определены в другом месте….
Я использовал adapter.notifyDataSetChanged() там, где это необходимо…
Пожалуйста, не предлагайте этого…
С уважением,
Arpit
Ответ №1:
Даже если что-то определено в другом месте, вы все равно сможете установить адаптер с помощью:
runOnUiThread(new Runnable() {
@Override
public void run() {
list.setAdapter(adapter);
}
});
или просто опубликуйте runnable в потоке пользовательского интерфейса:
view.post(new Runnable() {
@Override
public void run() {
list.setAdapter(adapter);
}
});
Надеюсь, это поможет, Кристофер
Ответ №2:
Я бы рекомендовал использовать Handler
(https://developer.android.com/reference/android/os/Handler.html ) чтобы выполнить все изменения в адаптере: создайте экземпляр обработчика для каждого действия, а затем отправьте Message
(https://developer.android.com/reference/android/os/Message.html ) в этот обработчик из ваших классов data manager / bean с новыми данными для адаптера списка. Затем вы можете безопасно обновить адаптер из обработчика, поскольку он будет выполнять свою работу в потоке пользовательского интерфейса.
Краткая запись здесь: https://web.archive.org/web/20200810154212/http://www.tutorialforandroid.com/2009/01/using-handler-in-android.html и есть ряд других вопросов по SO, которые описывают это.