Надеюсь, это поможет.
я есть таблица БД с ~ 15 000 строк, которые я хочу отобразить в виде списка. Я хочу отобразить первые 100, и когда пользователь прокручивает вниз до последнего элемента, следующие 100 должны быть загружены (так далее ...). Я реализовал OnScrollListener (), который вызывает AsyncTask, ответственный за загрузку большего количества элементов. У меня проблема в том, что мой SimpleCursorAdapter не обновляется после добавления новых строк в курсор. Я пробовал adapter.notifyDataSetChanged (); но это ничего не делает.
Это список слушателей:
myListView.setOnScrollListener(new OnScrollListener(){
public void onScroll(AbsListView view, int firstVisibleItem, int visibleItemCount, int totalItemCount) {
int lastInScreen = firstVisibleItem + visibleItemCount;
if(resultCursor != null){
if(lastInScreen == totalItemCount && isLoadingMore == false){
isLoadingMore = true;
loadedPage ++;
new LoadBooks().execute();
}
}
}
public void onScrollStateChanged(AbsListView view, int scrollState) {}
});
Это мой класс AsyncTask:
private class LoadBooks extends AsyncTask<String, Void, Void> {
private final ProgressDialog dialog = new ProgressDialog(FullIndex.this);
@Override
protected void onPreExecute() {
this.dialog.setMessage("Loading books...");
this.dialog.show();
}
@Override
protected Void doInBackground(String... arg0) {
try{
resultCursor = dbHelper.fetchBooks(0, loadedPage * LIMIT_RESULTS);
}catch(Exception e){
e.printStackTrace();
}
return null;
}
@Override
protected void onPostExecute(final Void unused){
if(resultCursor != null){
if(adapter == null){
startManagingCursor(resultCursor);
String[] from = new String[]{"name"};
int[] to = new int[]{R.id.book_item_tbx};
getListView().setTranscriptMode(ListView.TRANSCRIPT_MODE_NORMAL);
adapter = new SimpleCursorAdapter(FullIndex.this, R.layout.book_item, resultCursor, from, to);
setListAdapter(adp);
}else{
adapter.notifyDataSetChanged();
}
}
if(dialog != null && dialog.isShowing()){
dialog.dismiss();
}
isLoadingMore = false;
}
}
Новые строки добавляются в resultCursor, но список не обновляется, что мне не хватает?