Verwenden von LoaderCallbacks ohne Fragment

8

Ich lese etwas mit AsyncTaskLoader, damit ich die Kontaktliste mit dieser Technik laden kann. Der Code funktioniert nur, wenn ich Callbacks von einer Klasse implementiere, die Fragment wie in MyLoader extends Fragment implements LoaderCallbacks<ArrayList<Contact>> erweitert. Gibt es eine andere Art und Weise? Alles, was ich wirklich brauche, ist die Kontaktliste (Name, Telefon, Thumbnail), die ich an mein Backend senden kann. Wenn ich zum Beispiel versuche, Context zu verwenden, da ich das aus jeder Aktivität herausholen kann, indem ich einfach (Context)this mache, kann der Code nicht einmal kompiliert werden. Mit Kontext meine ich

%Vor%

Übrigens: Ich verwende mehrere Referenzen. Einer ist Ссылка .

FRAGE (noch einmal): Kann ich AsyncTaskLoader ohne Fragment oder FragmentActivity verwenden?

DER CODE, DER MIT DEM FRAGMENT FUNKTIONIERT:

%Vor%

MANIFEST:

%Vor%     
learner 22.04.2013, 16:38
quelle

1 Antwort

7

AsyncTaskLoader hat nichts damit zu tun, ob Sie Fragment oder Activity verwenden.

Um Ihnen ein Beispiel zu geben, betrachten Sie eine Listenaktivität:

%Vor%

Offensichtlich müssen Sie einen entsprechenden Adapter für die Listenansicht und das Layout erstellen, aber das Beispiel zeigt Ihnen nur, wie ein einfacher Lader für den Cursor für eine Aktivität funktioniert.

Stellen Sie außerdem sicher, dass alle Ihre Importe konsistent sind, entweder mit der support.v4 -Bibliothek oder der regulären Bibliothek:

%Vor%

Eine weitere Frage, die gestellt wird, ist, dass wenn die LoaderCallback -Schnittstelle standalone verwendet werden kann. Dies wird nicht empfohlen, wenn Sie berücksichtigen, dass LoaderCallback für.

ist

Die Schnittstelle LoaderManager.LoaderCallbacks<D> ist ein einfacher Vertrag, mit dem der LoaderManager Daten an den Client zurückmeldet. Was das bedeutet, ist seine einzige Aufgabe, einige Daten in den Hintergrund zu laden, der von einem Client angefordert wird, was effektiv eine Aktivität ist.

Wenn Sie eine eigenständige Klasse erstellen, können Sie die Klassendefinition erweitern, um LoaderManager.LoaderCallbacks<D> zu implementieren, aber Sie müssen die geladenen Daten über eine Art Mechanismus an die ursprüngliche Aktivität zurückmelden, was eine einfache Aufgabe verkomplizieren würde / p>

Wenn Sie jetzt wirklich darauf festgelegt sind, könnten Sie Ihre eigenständige Klasse wie folgt erstellen:

%Vor%

In Ihrer onLoadFinished -Methode müssen Sie die geladene Cursor entweder über einen Broadcast oder eine Art Nachrichtenbus zurücksenden:

  • LocalBroadcastManager
  • Otto
  • Messenger

Nachdem Sie diese Informationen an MainActivity gesendet haben, können Sie sie in den Adapter laden und so fortsetzen, wie sie sind.

    
wangyif2 22.04.2013 17:25
quelle