Я запускаю свой 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 .