Call Activity Methode Von Fragment
Ich bin den Umgang mit Fragmenten.
Ich habe eine Activity
und verschiedene fragments
.
Jeder fragment
brauchen den Zugang zu einem Class(call it X)
ermöglichen, dass Sie Zugang zu einer Datenbank, sondern, weil ich eine Menge von Fragmenten, die ich nicht wollen, erstellen Sie eine andere Instanz des Class X
in jedem fragment, wie ich denke, wird es erfordern viel memory
.
Also, wie kann ich tun?
Ich schrieb so etwas wie dieses (mit einem getter), aber es funktioniert nicht!
public class MyActivity {
private ClassX classx;
.....
public ClassX getClassX() {
return classx;
}
.....
}
Aber als, wie kann ich es aufrufen die fragment
?
InformationsquelleAutor user1315621 | 2012-08-22
Du musst angemeldet sein, um einen Kommentar abzugeben.
Dies ist ein wenig mehr von einem Java-Frage und android.
Wenn Sie auf der Suche auf die Datenbank zugreifen, Blick auf die Schaffung einer Datenbank singleton.
So etwas wie:
Dann also aus Ihren Fragmenten und Aktivitäten, die Sie können dann den folgenden Bereich in Ihrer Klasse (Besser verwenden eine base activity-und fragment speichern Sie sich wiederholende code).
Dann Ihre konkrete Fragmente können erweitern Sie Ihre
BaseFragment
z.B.SearchListFragment extends BaseFragment
Hoffe, das hilft.
Lesenswert über singletons und Datenbank
Grüße,
Chris
Die Initialisierung erfolgt in der Singleton-Klasse so aufrufen der Klasse statisch:
Database.getInstance()
ein Beispiel in der Android - /Java-framework wäre:Calendar.getInstance()
schafft, Dass dieCalendar
Objekt für Sie.Es ist nützlich, Methodik, sondern verwenden Sie nur für Objekte, die Sie immer gehen zu müssen/zu verwenden, da das Objekt stark referenziert statisch, so ist es fast nie zu GC würde. Also Datenbank/Application/Prefs etc. Vermeiden Sie für die Modell-Daten!
Wow, das ist fantastisch! Also, nur um sicher zu sein... ich kann call Datenbank-Klasse aus jedem Teil von meinem code mit Datenbank.getInstance() und der code bezieht sich immer auf derselben Instanz? Und was passiert, wenn das Objekt wechselt zu GC? Es wird nur langsam oder wird es einige Fehler?
Richtig. Aber nur zur kennen Sie seine nicht 100%, da jedes Objekt in Java ist es bis zur GC, aber das ist nicht, Sie zu erschrecken, nur um zu steigern Ihr Verständnis. Entweder-Weg, im schlimmsten Fall, wenn es nicht GC würde zwischen Lebenszyklus zumindest Ihre Aktivität/Fragment etc sind mit dem gleichen Objekt, Aber ich habe nie über dieses Thema vor 🙂
InformationsquelleAutor Chris.Jenkins
Durch das fragment rufen Sie Ihre Aktivität Methode
mit Schnittstelle für callBack ist auch eine bessere option.
Obwohl es vielleicht nicht die beste übung, aber es löste das problem für eine Weile, Schaffung von Mehrwert für die Kunden. Dann können wir uns für die beste option.
InformationsquelleAutor Atul Bhardwaj
müssen Sie Zusätzliche Besetzung getan werden müssen:
InformationsquelleAutor Jatin Patel
Definieren eine Schnittstelle namens
Callbacks
(oder etwas anderes, wenn Sie wollen). In es, haben eine öffentliche Methode namensgetClassX()
. Dann stellen Sie Ihre Aktivität umzusetzen, dieCallbacks
- Schnittstelle.In Ihre Fragmente, in
onAttach
speichern Sie eine Referenz auf einCallbacks
Objekt (D. H. Ihre Tätigkeit über so etwas wie:Hierdurch wird sichergestellt, dass die Fragmente in der Lage sind, um die Funktion aufzurufen. (im Fall, das Sie wiederverwenden möchten die Fragmente später in einer anderen app)
Dann in Ihrer Tätigkeit, in
onCreate()
erstellen Sie eine Instanz desClassX
. In IhremgetClassX()
Methode, der gerade wieder einen Hinweis darauf.Wenn Sie möchten, eine entsprechende Referenz aus Ihren Fragmenten, rufen Sie
mCallbacks.getClassX()
und Sie sortiert werden sollen.http://developer.android.com/training/basics/fragments/communicating.html
InformationsquelleAutor Mike T
Können Sie ein statisches Objekt in Ihre Aktivität, und verwenden Sie es aus dem fragment, oder rufen Sie die getActivity () - Methode im fragment, um den Zugriff auf die gesamte Aktivität von Objekten/Methoden
Warum nicht ein singleton-Muster auf Ihre Klasse. Können Sie sicherstellen, dass diese Weise, dass ClassX initialisiert wird, nur einmal.
InformationsquelleAutor Aerilys