ce que j'ai est un AsyncTask, qui a commencé dès que listview atteint point bas sur un écran, et AsyncTask il ajoute de nouveaux éléments à la listview. Voici le code:Adaptateur ListView de AsyncTask
@Override protected void onPostExecute(final List records) { super.onPostExecute(records); ((ActivityHome)context).runOnUiThread(new Runnable() { public void run() { for (ItemDailyRecord p : records) { adapter.add(p); } adapter.notifyDataSetChanged(); } }); }
@Override protected List doInBackground(Void... voids) { DbAdapterDailyRecord db = new DbAdapterDailyRecord(context); List list = db.getRecordsFromTo(offset, count); return list; }
est ici une méthode de l'adaptateur ListView:
@Override
public View getView(int position, View convertView, ViewGroup parent) {
if(position == getCount() - 1 && hasMoreItems){
HistoryLoaderTask t = new HistoryLoaderTask(position + 1, pageSize, getContext(),this);
t.execute();
footer.setText("Loading . . .");
}
Et le message d'erreur est (si je fais défiler ListView trop vite :)
CAUSÉS par: android.view.ViewRootImpl $ CalledFromWrongThreadException: seul le thread d'origine qui a créé une hiérarchie de vues peut toucher ses vues.
des idées comment résoudre ce problème?
L'appel 'runOnUiThread()' est inutile. –
Afficher le code que vous utilisez dans doInBackground –
mais si je le supprime, message d'erreur est également là :( – user1908375