La forma correcta e idiomática de actualizar automáticamente Cursor
s es llamar al Cursor#setNotificationUri
cuando se crean y antes de que se transfieran a lo que se les solicite. Luego llame al ContentResolver#notifyChange
cuando cambie cualquier cosa en el espacio de nombre de Uri Cursor
.
Por ejemplo, suponga que está creando una aplicación de correo simple y desea actualizar cuando llega un nuevo correo, pero también proporciona varias vistas en el correo. Tendría algunos Uri básicos definidos.
content://org.example/all_mail
content://org.example/labels
content://org.example/messages
Ahora, dicen que quería obtener un cursor que me dio todo el correo y actualizarse cuando llegue correo nuevo:
Cursor c;
//code to get data
c.setNotificationUri(getContentResolver(), Uri.parse("content://org.example/all_mail");
Ahora llega un nuevo correo, así que notificar:
//Do stuff to store in database
getContentResolver().notifyChange(Uri.parse("content://org.example/all_mail", null);
También debería notificar a todos los Cursor
s que seleccionaron para las etiquetas este nuevo mensaje se reunió
for(String label : message.getLabels() {
getContentResolver().notifyChange(Uri.parse("content://org.example/lables/" + label, null);
}
Y también, tal vez un cursor está viendo que un mensaje específico para notificar a ellos, así:
getContentResolver().notifyChange(Uri.parse("content://org.example/messages/" + message.getMessageId(), null);
Las llamadas getContentResolver()
suceda en el que se accede a los datos. Entonces, si está en un Service
o ContentProvider
es donde setNotificationUri
y notifyChange
. No debe hacer eso desde donde se accede a los datos, por ejemplo, un Activity
.
AlarmProvider
es un simple ContentProvider
que utiliza este método para actualizar Cursor
s.
@randzero significa que desea actualizar los elementos de vista de lista cada vez que se añade nuevo elemento en la base de datos , Es correcto ? –