我有一个应用程序显示来自SQLite数据库的数据并且数据不断变化,所以显然,我认为我应该使用LoaderManager来显示数据。
我是否读过一些关于在SQLite中使用LoaderManager的内容,并看到Alex Lokwood's answer关于实现CursorLoader并使用它,我看到this answer关于直接使用CursorLoader到SQLite DB而不是ContentProvider并开始使用commonsware的Loaderex。
我创建了这个类来显示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);
}
}
当活动仍在运行时,从“BroadcastListener”更改数据库时,问题就开始了。
基本上我正在寻找的是实时观察数据库的变化,但似乎(当我想重新查询时,我需要调用restartLoader
函数的Android Documentation db)。
有没有办法在幕后自动重新查询?
更新:
我最初的想法是创建一个重启加载器的函数,如下所示:
public static void restartLoader(Context context){
context.getSupportLoaderManager().restartLoader(0, null, LandingPageActivity.this);
}
但这似乎很糟糕,而不是最好的方法。
答案 0 :(得分:0)
当活动仍在运行时,从“BroadcastListener”更改数据库时问题开始...有没有办法在幕后自动重新查询?
让BroadcastReceiver
使用insert()
上的update()
,replace()
,delete()
和SQLiteCursorLoader
方法来修改数据库。然后,Cursor
将自动重新加载。