我一直在这方面工作,一直在努力了解这一切是如何融合在一起的,并重新编写我的代码以便更好地融合在一起。
所以我会告诉你我有什么。没有错误,只是空白。
MyAgendaLoaderManager.java:
public class MyAgendaLoaderManager implements LoaderCallbacks<Cursor>{
MyAgendaAdapter agendaAdapter;
Context mContext;
String date;
public MyAgendaLoaderManager(Context context, MyAgendaAdapter adapter, String date) {
agendaAdapter = adapter;
mContext = context;
this.date = date;
}
@Override
public Loader<Cursor> onCreateLoader(int arg0, Bundle arg1) {
Uri baseUri = SmartCalProvider.CONTENT_URI;
return new CursorLoader(mContext, baseUri,
new String[] {"_id, event_name, start_date, start_time, end_date, end_time, location"},
"WHERE date(?) >= start_date and date(?) <= end_date", new String[]{date, date}, null);
}
@Override
public void onLoadFinished(Loader<Cursor> arg0, Cursor arg1) {
// TODO Auto-generated method stub
agendaAdapter.swapCursor(arg1);
}
@Override
public void onLoaderReset(Loader<Cursor> arg0) {
// TODO Auto-generated method stub
agendaAdapter.swapCursor(null);
}
}
CalProvider.java:
public class SmartCalProvider extends ContentProvider {
public static final String AUTHORITY = "content://com.smartcal.eventprovider";
public static final Uri CONTENT_URI = Uri.parse(AUTHORITY);
private static final int DATABASE_VERSION = 1;
private static final String DATABASE_NAME = "cal.db";
private SmartCalOpenHelper openHelper;
private SQLiteDatabase database;
@Override
public boolean onCreate() {
openHelper = new SmartCalOpenHelper(getContext());
return true;
}
@Override
public String getType(Uri uri) {
return null;
}
@Override
public Cursor query(Uri uri, String[] projection, String selection,
String[] selectionArgs, String sortOrder) {
database = openHelper.getWritableDatabase();
return database.query("events_info", projection, selection, selectionArgs, null, null, null);
}
@Override
public Uri insert(Uri uri, ContentValues values) {
return null;
}
@Override
public int delete(Uri arg0, String arg1, String[] arg2) {
return 0;
}
@Override
public int update(Uri uri, ContentValues values, String selection,
String[] selectionArgs) {
return 0;
}
}
如果重要的话,那就是在主要活动中运行它的代码:
agendaAdapter = new MyAgendaAdapter(this, null);
MyAgendaLoaderManager loader = new MyAgendaLoaderManager(this, agendaAdapter, getChosenDate());
我只是看不出它是如何空白的。请记住,我故意在CursorLoader和LoaderManager中留下一些空白,因为我不想全部填写以查明是否有错误,所以我只是测试是否显示初始列表,并且它不是。任何帮助弄清楚我做错了什么都会非常感激。
编辑:实际上,现在我考虑过它,除了我的适配器创建持有它的视图之外,没有什么能够将我正在做的事情与特定列表联系起来。但是这种观点不是常规布局的一部分。所以也许这就是我的错误,不幸的是我不知道该怎么做。
答案 0 :(得分:2)
您不应直接实例化加载程序。您需要完成活动getLoaderManager()
方法才能正确初始化并启动它。因此,根据您的活动,请根据需要致电getLoaderManager().initLoader()/restartLoader()
。