Jak automatycznie ponownie zapytać za pomocą LoaderManager
Mam aplikację, która pokazuje dane z bazy danych SQLite, a dane stale się zmieniają, więc oczywiście pomyślałem, że powinienem użyć LoaderManager, aby wyświetlić dane.
czy czytam trochę o używaniu LoaderManager z SQLite i widziałemOdpowiedź Alexa Lokwooda o implementacji CursorLoadera i używaniu go, i widziałemta odpowiedź o używaniu CursorLoadera bezpośrednio do DB SQLite zamiast ContentProvider i rozpoczęciu korzystania z oprogramowania commonswareLoaderex.
Stworzyłem tę klasę do wyświetlania danych w ListView:
public class LandingPageActivity extends FragmentActivity implements LoaderCallbacks<Cursor> {
ListView list;
SimpleCursorAdapter mAdapter;
private SQLiteCursorLoader loader = null;
private Context mContext;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.fragment_friends_and_threads);
list = (ListView) findViewById(R.id.list);
mContext = LandingPageActivity.this;
mAdapter = new SimpleCursorAdapter(this, android.R.layout.simple_list_item_1, null,
new String[] { Properties.Title.columnName }, new int[] { android.R.id.text1 }, 0);
list.setAdapter(mAdapter);
getSupportLoaderManager().initLoader(0, null, this);
}
@Override
public Loader<Cursor> onCreateLoader(int arg0, Bundle arg1) {
Context c = mContext;
String query = "SELECT * FROM TABLE_NAME";
SQLiteOpenHelper db = DatabaseHelper.getDatabase();
loader = new SQLiteCursorLoader(c, db, query, null);
return loader;
}
@Override
public void onLoadFinished(Loader<Cursor> arg0, Cursor arg1) {
mAdapter.changeCursor(arg1);
}
@Override
public void onLoaderReset(Loader<Cursor> arg0) {
mAdapter.changeCursor(null);
}
}
problem zaczyna się, gdy baza danych zostanie zmieniona z „BroadcastListener”, gdy działanie nadal działa.
zasadniczo to, czego szukam, to obserwacja zmian w bazie danych w czasie rzeczywistym, ale wydaje się (również zDokumentacja Androida że muszę zadzwonić dorestartLoader
funkcja, gdy chcę ponownie zapytać db).
czy istnieje sposób na zautomatyzowanie ponownego zapytania za kulisami?
AKTUALIZACJA:
Moją pierwszą myślą było stworzenie funkcji, która ponownie uruchamia program ładujący, coś w tym stylu:
public static void restartLoader(Context context){
context.getSupportLoaderManager().restartLoader(0, null, LandingPageActivity.this);
}
ale wydaje się, że nie jest to najlepszy sposób.