Activité D'Appel De La Méthode Du Fragment
Je fais face à des fragments.
J'ai un Activity
et les différents fragments
.
Chaque fragment
ont besoin d'avoir accès à un Class(call it X)
qui lui permettent d'accéder à une base de données, mais, parce que j'ai beaucoup de fragments, je ne veux pas créer une instance différente de la Class X
dans chaque fragment que je pense qu'il faudra beaucoup de memory
.
Alors, comment puis-je faire?
J'ai écrit quelque chose comme ceci (avec un getter), mais il ne fonctionne pas!
public class MyActivity {
private ClassX classx;
.....
public ClassX getClassX() {
return classx;
}
.....
}
Mais que, comment puis-je l'appeler à partir du fragment
?
OriginalL'auteur user1315621 | 2012-08-22
Vous devez vous connecter pour publier un commentaire.
C'est un peu plus de un Java question et android.
Si vous cherchez à accéder à la base de données, regardez la création d'une base de données de singleton.
Donc quelque chose comme:
Alors à partir de votre des fragments et des activités que vous pouvez ensuite placer le champ suivant dans votre classe (Mieux utiliser une base de l'activité et de fragment pour vous sauver la répétition du code).
Alors votre béton fragments pouvez étendre votre
BaseFragment
par exempleSearchListFragment extends BaseFragment
Espère que cette aide.
La peine de lire à propos de les singletons et base de données
Ce qui concerne,
Chris
L'initialisation se fait dans la classe Singleton donc l'appel de la classe de manière statique:
Database.getInstance()
un exemple dans l'Android/Java cadre:Calendar.getInstance()
Qui crée laCalendar
objet pour vous.Il est utile de méthodologie, mais seulement l'utiliser pour des Objets qui vous sont toujours allez avoir besoin/l'utilisation, en tant que l'objet est fortement référencé de manière statique, il est donc presque jamais GC. Donc, de Base de données/Application/Préf., etc. Éviter pour le Modèle les données!
Wow, c'est fantastique! Donc, juste pour être sûr... je peux appeler de la Base de données de la classe de chaque partie de mon code à l'aide de la Base de données.getInstance() et le code ne se réfèrent toujours à la même instance? Et qu'advient-il si l'objet passe à la GC? Elle sera lente ou il fera quelques erreurs?
Correct. Mais juste pour - vous au courant de ses pas à 100% comme avec n'importe quel Objet en Java c'est pour GC, mais c'est pas pour vous faire peur, juste pour augmenter votre compréhension. Soit-way, le pire des cas, si il ne se GC avais entre lifecyle au moins de votre Activité/Fragment, etc en utilisant le même Objet, Mais je n'ai jamais rencontré ce problème avant 🙂
OriginalL'auteur Chris.Jenkins
À partir du fragment d'appel de votre activité méthode
en utilisant l'Interface de rappel est également une meilleure option.
Bien qu'il pourrait ne pas être la meilleure pratique, mais il a résolu le problème pour un certain temps, la création de valeur pour le client. Ensuite, nous pouvons chercher la meilleure option.
OriginalL'auteur Atul Bhardwaj
vous devez fonte Supplémentaire doit être fait:
OriginalL'auteur Jatin Patel
Définir une interface appelée
Callbacks
(ou quelque chose d'autre si vous voulez). En cela, une méthode appeléegetClassX()
. Puis faire de votre Activité, mettre en œuvre lesCallbacks
interface.Dans vos Fragments, en
onAttach
, stocker une référence à unCallbacks
objet (c'est à dire votre activité par quelque chose comme:Cela permettra de garantir que les Fragments sont en mesure d'appeler la fonction. (dans le cas où vous souhaitez réutiliser des fragments plus tard dans une autre application)
Puis dans votre Activité, dans
onCreate()
, créer une instance deClassX
. Dans votregetClassX()
méthode, il suffit de retourner une référence à elle.Quand vous voulez une référence à partir de vos Fragments d'appel
mCallbacks.getClassX()
et vous devriez être triés.http://developer.android.com/training/basics/fragments/communicating.html
OriginalL'auteur Mike T
Vous pouvez utiliser un objet statique dans votre activité, et de l'utiliser à partir du fragment, ou appeler le getActivity() dans votre fragment d'accéder à l'ensemble de l'activité des objets/méthodes
Pourquoi ne pas utiliser un pattern singleton sur votre classe. Vous pourrez vous assurer de cette façon que ClassX est initialisé qu'une seule fois.
OriginalL'auteur Aerilys