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 .