Вопрос:

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

android listview

27201 просмотра

3 ответа

0 Репутация автора

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

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

Есть идеи?

Автор: Источник Размещён: 16.03.2009 07:03

Ответы (3)


19 плюса

191 Репутация автора

У меня такая же проблема ... и я очень обрадовался, когда наткнулся на этот вопрос. Но нет ответа? :-(

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

Короче:

Цитата сверху ссылка:

Мы должны использовать объект 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 () обработчика.

Я надеюсь, что это помогает другим там.

Автор: CatDaaaady Размещён: 31.05.2009 03:38

4 плюса

0 Репутация автора

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

SlowAdapter slowAdapter = new SlowAdapter(this);

list.setAdapter(slowAdapter);
slowAdapter.notifyDataSetChanged();
Автор: raj Размещён: 30.04.2010 01:17

3 плюса

1832 Репутация автора

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

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

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

Автор: digitarald Размещён: 15.06.2010 05:51
Вопросы из категории :
32x32