I'm initializing an adapter with a cursor, and setting the adapter to a listview.
DatabaseHelper dbh = new DatabaseHelper(getActivity());
Cursor c = dbh.getMoviesTableCursor();
myAdapter = new DatabaseAdapter(getActivity(), c, 0);
listView.setAdapter(myAdapter);
When I make the query in dbh.getMoviesTableCursor()
method, I run said query in seperate thread
private Cursor getMoviesTableCursor(){
...
new Thread() {
@Override
public void run() {
moviesTableCursor = qb.query(db, sqlSelect, null, null, null, null, null);
}
}.start();
...
return moviesTableCursor;
}
Now my listview does not show anything, versus when I did not run the query in a new thread like so
private Cursor getMoviesTableCursor(){
...
moviesTableCursor = qb.query(db, sqlSelect, null, null, null,
...
return moviesTableCursor;
}
So I tried updating the cusor using a handler with notifyDataSetChanged()
final Handler handler = new Handler();
private Cursor getMoviesTableCursor(){
...
new Thread() {
@Override
public void run() {
moviesTableCursor = qb.query(db, sqlSelect, null, null, null, null, null);
handler.post(new Runnable() {
@Override
public void run() {
// use handler to avoid update UI from none-UI thread.
// do your update list view adapter here.
// FragmentMovies.myAdapter.notifyDataSetChanged();
MyActivity.myAdapter.notifyDataSetChanged();
}
});
}
}.start();
...
return moviesTableCursor;
}
But notifyDataSetChanged()
does not refresh the cursor in myAdapter