我正在尝试将我的 Android 应用程序转换为使用 LoaderManager 和 CursorLoader。基本上,我有一个包含 ADDRESS 列和 DISTANCE 列的 SQLite 数据库,我想将列值加载到我的 ListView 行中。
现在,我做了很多研究,一切都指向本教程:http: //mobile.tutsplus.com/tutorials/android/android-sdk_content-providers/
这是一个很好的教程,但有几件事我仍然不明白。主要是,如何构造传递给“new CursorLoader()”的内容 URI?我没有使用来自设备联系人等的任何外部数据。
请在下面查看我的代码。我对如何生成 BASE_URI 的值感到困惑:
public class FavoritesFragment extends ListFragment implements
LoaderManager.LoaderCallbacks<Cursor> {
SimpleCursorAdapter mAdapter;
static final String[] FAVORITES_SUMMARY_PROJECTION = new String[] {
MyApplication.COLUMN_ID, MyApplication.COLUMN_ADDRESS,
MyApplication.COLUMN_DISTANCE, };
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
mAdapter = new SimpleCursorAdapter(getActivity(),
R.layout.locations_list_row, null, new String[] {
MyApplication.COLUMN_ADDRESS,
MyApplication.COLUMN_DISTANCE }, new int[] {
R.id.address2, R.id.distance }, 0);
setListAdapter(mAdapter);
getLoaderManager().initLoader(0, null, this);
}
@Override
public void onListItemClick(ListView l, View v, int position, long id) {
// Insert desired behavior here.
}
public Loader<Cursor> onCreateLoader(int id, Bundle args) {
return new CursorLoader(getActivity(), ***BASE_URI***,
FAVORITES_SUMMARY_PROJECTION, null, null, null);
}
public void onLoadFinished(Loader<Cursor> loader, Cursor data) {
mAdapter.swapCursor(data);
}
public void onLoaderReset(Loader<Cursor> loader) {
mAdapter.swapCursor(null);
}
}