Intereting Posts
Определите разрешение для сторонних приложений для использования на Android Фокусировка EditText в ListView Как изменить библиотеку поддержки дизайна Android? Получите некоторый код, работающий после того, как приложение будет установлено или будет получено намерение после того, как приложение будет установлено как AndroidLost Как проверить фрагмент с помощью эспрессо Кнопка плавающего действия Android с функцией перетаскивания Установить прослушиватель перетаскивания на SpannableString Как кэшировать / сохранять пользовательский объект класса в Android? Adt eclipse bundle 02-07-2014 ОБНОВЛЕНИЕ Удалить .iml файлы из GIT для хорошего Android – добавьте кнопку next и prev на экранную клавиатуру, которая появляется при щелчке редактируемого текста в моей активности Хотите скомпилировать родной Android-бинар, я могу запускать в терминале по телефону Отправка сообщения обработчику мертвой нити при получении местоположения из IntentService Поймать, когда приложение Android пошло на задний план Почему выход java.exe со значением 1 в студии Android

Android: обновить Listview после Thread загружает данные из сети

  1. Мне нравится, что мой графический интерфейс появляется сразу, когда пользователь запускает приложение.
  2. Затем некоторые данные (текст, картинки) загружаются в фоновом режиме (например, приложение YouTube).
  3. ListView и Gallery автоматически обновляются с помощью этих новых данных.

Я запускаю свой ListView, запускаю Thread и загружаю данные … а затем ListView не обновляется! Несколько человек сказали мне, что я должен использовать notifyDataSetChanged() . Но я не могу поместить эту команду в свой поток (просто неизвестно).

Есть идеи?

У меня такая же проблема … и я взволновался, когда столкнулся с этим вопросом. Но нет ответа? 🙁

После того, как проблема в сиквете около двух недель, я нашел решение здесь :

Короче:

Ответить с цитированием

Мы должны использовать объект Handler, потому что мы не можем обновлять большинство объектов пользовательского интерфейса в отдельном потоке. Когда мы отправляем сообщение обработчику, он будет сохранен в очереди и как можно скорее выполнит выполнение потока пользовательского интерфейса.

После того, как вы проверите код, вы увидите, что говорит автор.
ПРИМЕЧАНИЕ. Даже с обработчиком Android может не позволить вам обновлять объект вида из метода run () потока. Я получил эту ошибку:

 05-31 02:12:17.064: ERROR/AndroidRuntime(881): android.view.ViewRoot$CalledFromWrongThreadException: Only the original thread that created a view hierarchy can touch its views. 

Чтобы обойти это, я обновил массив данных в моем методе run () и использовал этот массив для обновления представления в методе handleMessage () обработчика.

Надеюсь, это поможет другим.

Вы можете использовать slowAdapter для обновления View:

 SlowAdapter = new SlowAdapter(this); list.setAdapter(SlowAdapter); SlowAdapter.notifyDataSetChanged(); 

Просто нашел это сам, читая эту тему и пытаясь.

Кратко: метод AsyncTask onProgressUpdate может касаться представления : http://developer.android.com/reference/android/os/AsyncTask.html#onProgressUpdate (прогресс …)

Предпосылки: Мне нужно было вызвать запрос на мой курсор, чтобы ListView постоянно обновлялся, когда задача заполняет базу данных. Требование, сделанное в doInBackground, не удалось с указанным вызовом CalledFromWrongThreadException, но работает тот же код в onProgressUpdate .