W sposobie query
swój ContentProvider
dołączyć słuchacza do zwracanego kursora:
Cursor cursor = queryBuilder.query(dbConnection, projection, selection, selectionArgs, null, null, sortOrder);
cursor.setNotificationUri(getContext().getContentResolver(), uri);
Następnie w swoim insert
/update
/delete
metod użyć kodu jak poniżej:
final long objectId = dbConnection.insertOrThrow(ObjectTable.TABLE_NAME, null, values);
final Uri newObjectUri = ContentUris.withAppendedId(OBJECT_CONTENT_URI, objectId);
getContext().getContentResolver().notifyChange(newObjectUri , null);
Twój CursorLoader
będzie zostać powiadomiony, a OnLoadFinished(Loader, Cursor)
zostanie ponownie wywołany.
Jeśli nie używasz Loader
The ContentObserver
jest droga, za pomocą kilku linijek kodu użytkownik jest powiadamiany o zmianach db (ale trzeba będzie ponowić kwerendę ręcznie).
private ContentObserver objectObserver = new ContentObserver(new Handler()) {
@Override
public void onChange(boolean selfChange) {
super.onChange(selfChange);
restartObjectLoader();
}
};
Pamiętaj, aby zadzwonić onResume()
:
getContentResolver().registerContentObserver(ObjectProvider.OBJECT_CONTENT_URI, false, objectObserver);
oraz w onPause()
:
getContentResolver().unregisterContentObserver(objectObserver);
Aktualizacja: UI Zmiany Jest to większy temat, ponieważ zależy to od Adapter
Ciebie użyj, aby wypełnić ListView
lub RecyclerView
.
CursorAdapter W onLoadFinished(Loader loader, Cursor data)
mAdapter.swapCursor(data);
ArrayAdapter W onLoadFinished(Loader loader, Cursor data)
Object[] objects = transformCursorToArray(data); //you need to write this method
mAdapter.setObjects(objects); //You need to wrie this method in your implementation on the adapter
mAdapter.notifyDataSetChange();
RecyclerView.Adapter W onLoadFinished(Loader loader, Cursor data)
Object[] objects = transformCursorToArray(data); //you need to write this method
//Here you have more mAdapter.notify....()
Przeczytaj from here, aby uzyskać inny sposób powiadomienia o RecyclerView.Adapter
.
element w koszyku jest połączony z operacją * wstaw * w bazie danych? – Blackbelt
Nie jestem pewien, co masz na myśli, ale zasadniczo po zakończeniu żądania http aktualizuję odpowiedni wiersz w tabeli bazy danych, który to stan powinien być w jakiś sposób odzwierciedlany przez interfejs użytkownika. Mój problem polega na tym, że nie mogę znaleźć sposobu na poinformowanie UI o aktualizacji po zmianie danych DB. – midnight
czy zadzwoniłeś do notifyChange po aktualizacji wiersza? – Blackbelt