所以,我有我的MainDisplayActivity
它实现了两个Activity
,并LoaderManager.LoaderCallbacks<Cursor>
。 在这里,我有一个ListView
,我充满了我使用ContentProvider的从我的数据库获取日程信息。 我也有一个GridView
是一个日历。 我把它单击单元格时,该议程与点击每天更新设置。 我的问题是重用我创建的装载机时onCreate()
的setOnItemClickListener()内,它并没有刷新新的光标,我创建的信息。 我可以创建另一个ID一个新的Loader,和它的作品一次,但一旦我点击的一天,它停止耳目一新。 这个问题,在于光标。 我怎样才能刷新从装载机光标所以我没有继续创造一个新的Loader? 提前致谢!
初始调用在我创建的onCreate()的装载机MainDisplayActivity
类:
makeProviderBundle(new String[] {"_id, event_name, start_date, start_time, end_date, end_time, location"},
"date(?) >= start_date and date(?) <= end_date", new String[]{getChosenDate(), getChosenDate()}, null);
getLoaderManager().initLoader(0, myBundle, MainDisplayActivity.this);
list.setAdapter(agendaAdapter);
这些是从覆盖的方法LoaderCallbacks<Cursor>
@Override
public Loader<Cursor> onCreateLoader(int id, Bundle args) {
Uri baseUri = SmartCalProvider.CONTENT_URI;
return new CursorLoader(this, baseUri, args.getStringArray("projection"),
args.getString("selection"), args.getStringArray("selectionArgs"), args.getBoolean("sortOrder") ? args.getString("sortOrder") : null );
}
@Override
public void onLoadFinished(Loader<Cursor> arg0, Cursor arg1) {
agendaAdapter.swapCursor(arg1);
}
@Override
public void onLoaderReset(Loader<Cursor> arg0) {
//Not really sure how this works. Maybe I need to fix this here?
agendaAdapter.swapCursor(null);
}
public void makeProviderBundle(String[] projection, String selection, String[] selectionArgs, String sortOrder){
/*this is a convenience method to pass it arguments
* to pass into myBundle which in turn is passed
* into the Cursor loader to query the smartcal.db*/
myBundle = new Bundle();
myBundle.putStringArray("projection", projection);
myBundle.putString("selection", selection);
myBundle.putStringArray("selectionArgs", selectionArgs);
if(sortOrder != null) myBundle.putString("sortOrder", sortOrder);
}
任何额外的代码需要,请不要犹豫,问。 再次感谢任何帮助!