Tengo un ContentProvider que maneja toda la inserción y recuperación de datos relacionados con mi aplicación, estoy siguiendo el patrón sugerido por Virgil Dobjanschi en Google I/O. Estoy usando el primer patrón.Mejores prácticas para unir tablas y notificar ContentObservers en Android ContentProvider
Mi problema es que tengo una entidad lógica que estaba representada por varias tablas en la base de datos.
Por ejemplo, tengo una tabla de artículos y una tabla ArticleExtras. Los artículos representan el artículo en sí, mientras ArticleExtras representa información adicional sobre cierto artículo, como el número de comentarios.
Utilicé CursorAdapter en la interfaz de usuario para mostrar el título del artículo y el número de comentarios de ese artículo en una fila de ListView.
Para implementar eso, agregué una declaración left outer join ArticleExtras on
en mi método de consulta ContentProvider para la tabla Artículo, para que CursorAdapter obtenga ArticleExtras junto con el Artículo mismo.
Cuando los artículos nuevos se obtienen de la web, los inserto en la base de datos a través de ContentProvider, y luego el CursorAdapter recibe una notificación y actualiza la interfaz de usuario, esta parte funcionó como se esperaba.
Pero cuando busqué el número de comentarios (ArticleExtras), quiero que el mismo CursorAdapter, que está a la espera de cambios en el content://com.myapp.content/Articles
, también se notifique para que pueda actualizar mi fila en ListView.
Mi implementación actual es la siguiente: después de insertar ArticleExtras en la base de datos, comienzo una nueva consulta para verificar si la tabla Articles tiene alguna fila relacionada con los ArticleExtras que acabo de insertar. De ser así, crearé una nueva uri para ese artículo (por ejemplo: content://com.myapp.cotent/Articles/123
) y llamo al getContext().getContentResolver().notifyChange(uri, null)
, de modo que se notificará al CursorAdapter correspondiente que está a la espera de cambios en este artículo.
¿Es correcto el enfoque o hay alguna forma mejor de implementar lo que quiero?