Como reexibir automaticamente com o LoaderManager
Eu tenho um aplicativo que mostra dados de um DB SQLite e os dados mudam constantemente, então, obviamente, eu pensei que deveria usar um LoaderManager para mostrar os dados.
eu li um pouco sobre como usar o LoaderManager com SQLite e viAlex Lokwood's answer sobre como implementar o CursorLoader e usá-lo, e eu vi oesta resposta sobre como usar um CursorLoader diretamente para um banco de dados SQLite em vez de um ContentProvider e começar a usar o commonswareLoaderex.
Eu criei esta classe para mostrar os dados em um 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);
}
}
o problema começa quando o banco de dados é alterado de um 'BroadcastListener' enquanto a atividade ainda está em execução.
basicamente o que eu estou procurando é em tempo real, observando as mudanças no banco de dados, mas parece (também doDocumentação do Android que eu preciso chamar orestartLoader
função quando eu quero voltar a consultar o db).
Existe uma maneira de automatizar a re-consulta nos bastidores?
ATUALIZAR:
Meu pensamento inicial foi criar uma função que reinicia o carregador, algo assim:
public static void restartLoader(Context context){
context.getSupportLoaderManager().restartLoader(0, null, LandingPageActivity.this);
}
mas parece cru e não a melhor maneira de fazer isso.