Como posso atualizar o cursor de um CursorLoader?
Então eu tenho meuMainDisplayActivity
que implementa tantoActivity
eLoaderManager.LoaderCallbacks<Cursor>
. Aqui eu tenho umListView
, que preencho com as informações da Agenda que recebo do meu banco de dados usando um ContentProvider. eu tambem tenho umGridView
que é um calendário. Eu tenho que configurar quando clicar em uma célula, que a agenda é atualizada com o dia clicado. Meu problema é que ao reutilizar o Loader eu crieionCreate()
dentro do setOnItemClickListener (), ele não atualiza as informações com o novo cursor que estou criando. Eu posso apenas criar um novo Loader com outro ID, e ele funciona uma vez, mas quando eu clico em outro dia, ele pára de atualizar. O problema está no cursor. Como posso atualizar um cursor de um carregador para não ter que continuar criando um novo carregador? Desde já, obrigado!
Chamada inicial para criar o Loader em onCreate () em MyMainDisplayActivity
classe:
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);
Estes são os métodos substituídos deLoaderCallbacks<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);
}
Qualquer código adicional necessário, por favor, não hesite em perguntar. Obrigado novamente por qualquer ajuda!