Aktualizuję aplikację dla systemu Android 2.2, aby używać CursorLoader (przy użyciu biblioteki zgodności v4) i wyrywam sobie włosy, próbując zrozumieć, dlaczego metoda onLoadFinished
nie jest wywoływana, gdy dostawca treści powiadamia o zmianie treści powiązanej z zapytaniem CursorLoader.Android CursorLoader nie odpowiada na powiadomienia ContentProvider
Moduł CursorLoader wysyła zapytanie do dostawcy treści klienta. Mój dostawca ustawia powiadomienia URI w swojej metodzie zapytania:
cursor.setNotificationUri(getContext().getContentResolver(), uri);
i powiadamia zmian w jego Wstaw/aktualizacja/delete metody:
getContext().getContentResolver().notifyChange(uri, null);
Sprawdziłem, że URI jest identyczna w obu przypadkach. Poprzednio korzystałem z usługi ManagedQuery z tym samym dostawcą treści, a treść zapytana została zaktualizowana dobrze, co powoduje, że wydaje mi się, że dostawca treści jest prawdopodobnie w porządku.
Przyjrzałem się przykładowi LoaderCursorSupport i, co ciekawe, po uruchomieniu go na Nexus One nie widzę, aby odzwierciedlało ono zmiany, które wprowadzam w kontaktach z nazwami (przełączanie między przykładową aplikacją a aplikacją kontaktów). Czy to powinno być? Jeśli tak, czy jest jakiś podstawowy problem, którego nie jestem świadomy?
Czy możesz podać kod, który pomoże nam zidentyfikować problem? –
Włączenie debugowania może pomóc, 'LoaderManager.enableDebugLogging (true)' –
Dzięki za wskazówkę debugowania. Mój kod klienta jest w zasadzie taki sam, jak w przypadku wskazanego przeze mnie przykładu LoaderCursorSupport. Biorąc pod uwagę, że to samo dotyczy tego problemu, czy źle zrozumiałem, jak powinien działać CursorLoader, tzn. Czy uruchamiam przykład pomocy, aby wyświetlić listę kontaktów, a następnie edytować kontakt w książce adresowej, jeśli nie zmieni się na liście wyświetlanej przez przykładowa aplikacja? – siwatson