Я пытаюсь редактировать ListView
на регулярные промежутки времени с помощью TimerTask:Содержимое адаптера изменилось, но ListView не получил уведомление: проблема с перекрестной резьбой?
public static TimerTask mTtRefreshUpload = new TimerTask() {
@Override
public void run() {
((Activity) context).runOnUiThread(new Runnable() {
@Override
public void run() {
// Should create new adapter in here, not in Background Thread
refreshStatusItemAdapter = new RefreshStatusItemAdapter(context, R.layout.simple_list_item_upload, Constants.mLlItems);
}
});
}
};
Но я получаю эту ошибку:
java.lang.IllegalStateException: The content of the adapter has changed but ListView did not receive a notification. Make sure the content of your adapter is not modified from a background thread, but only from the UI thread. Make sure your adapter calls notifyDataSetChanged() when its content changes.
Я смотрел в documentation for TimerTask, но это не помогло.
В чем проблема? Это связано с проблемами поперечной резьбы?
Да, метод запуска задачи таймера работает на фоновом потоке, поэтому вам нужно использовать механизм, такой как runOnUiThread, чтобы вытолкнуть любую работу UI, запускаемую оттуда обратно в поток пользовательского интерфейса. –
Чего вы хотите достичь? Я угадываю, посмотрев на ваш фрагмент кода 'refreshStatusItemAdapter' уже был инициализирован и добавлен в' ListView' .. это правильно? – Rupesh
@Chris @Karthik: просмотр списка уже устанавливает адаптер и показывает данные успешно. Но даже я инициализировал адаптер или вызывал «notifyDataSetChanged» адаптера в runOnUIThread или Handler, как указано выше. Я все еще получаю ошибку, как указано выше. Иногда я получаю эту ошибку, не всегда. –