lit*_*leK 3 java android android-cursor android-loadermanager
我试图将我的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);
}
}
Run Code Online (Sandbox Code Playgroud)
BASE_URI应该是static Uri在你的定义中ContentProvider,它被用来当你对查询/更新/插入/做任何事情时ContentProvider,UriMatcher也ContentProvider可以在输出中定义一个Integer允许你使用一个Switch语句(如在例子中)query()该教程中的方法)将正确的查询设置为数据库中的正确表.您应该BASE_URI为数据库中的每个表定义一个不同的.
如果你看一下该教程他们已经定义的单个Uri于ContentProvider:
private static final String TUTORIALS_BASE_PATH = "tutorials";
public static final Uri CONTENT_URI = Uri.parse("content://" + AUTHORITY
+ "/" + TUTORIALS_BASE_PATH);
Run Code Online (Sandbox Code Playgroud)
在ContentProvider中,您应该将TUTORIALS_BASE_PATHfrom 的值更改"tutorials"为包含您提到的ADDRESS和DISTANCE列的表的名称.您的CursorLoader构造函数代码如下所示:
return new CursorLoader(getActivity(), YourContentProvider.CONTENT_URI,
FAVORITES_SUMMARY_PROJECTION, null, null, null);
Run Code Online (Sandbox Code Playgroud)
为了完整性,您应该将变量名称更改为更具描述性,因此,而不是TUTORIALS_BASE_PATH和CONTENT_URI,您应该将其更改为类似LOCATIONS_BASE_PATH和LOCATIONS_URI.
| 归档时间: |
|
| 查看次数: |
4914 次 |
| 最近记录: |