我正在尝试实现 LoaderManager,因为它需要一段时间才能将行加载到我的 ListView 中。我在网上找到的所有示例都一直引用 CONTENT_URI - 我没有的东西。
这是我加载 ListView 内容的旧代码:
@Override
public void onCreate( Bundle savedInstanceState )
{
...
String path = "/sdcard/mytunesdb.sqlite"; // Warning, yes, I know..
db = SQLiteDatabase.openDatabase( path, null, 0 );
lvCustomList = (ListView) findViewById( R.id.lv_custom_list );
String[] columns = new String[] { "Name" };
// THE XML DEFINED VIEWS FOR EACH FIELD TO BE BOUND TO
int[] to = new int[] { R.id.lv_tune };
Cursor c = db.rawQuery( "SELECT rowid _id, Name FROM Tune ORDER BY Name", null );
cAdapter = new MySimpleCursorAdapter( this, R.layout.like_hate_row, c, columns, to, 0 );
viewBinder = new CustomViewBinder();
cAdapter.setViewBinder( (ViewBinder) viewBinder );
lvCustomList.setAdapter( cAdapter );
好的,所以我在更改上述代码后开始实现 LoaderManager 回调,以便使用空投影(空而不是“列”参数)创建 cAdapter。这就是我得到的结果。如何将 rawQuery 放入 onCreateLoader 方法中?
@Override
public Loader<Cursor> onCreateLoader(int id, Bundle args)
{
String[] columns = new String[] { "Name" };
!!! HELP - I don't have a CONTENT_URI - my database is external - what do I put below?
CursorLoader cursorLoader = new CursorLoader( getActivity(),
TutListProvider.CONTENT_URI, columns, null, null, null);
return cursorLoader;
}
@Override
public void onLoadFinished(Loader<Cursor> loader, Cursor cursor)
{
cAdapter.swapCursor( cursor );
}
@Override
public void onLoaderReset(Loader<Cursor> loader)
{
cAdapter.swapCursor( null );
}
我需要保留 URI 代码并为我的 SQL 数据库实现 ContentProvider 吗?