Comment puis-je obtenir le contexte dans un fragment?
Je dois utiliser ma base de données dont le constructeur prend dans le contexte, mais getApplicationContext()
et FragmentClass.this
ne travaille pas ce que je peux faire?
Constructeur de base de données
public Database(Context ctx)
{
this.context = ctx;
DBHelper = new DatabaseHelper(context);
}
getActivity().getApplicationContext()
dans une variable d'instance lorsque le fragment est créé, puis à utiliser ce contexte chaque fois que vous le souhaitez à l'intérieur de la classe de fragments. Ce contexte survivra aux détachements de fragments.getActivity
a toujours été disponible. C'est cegetContext
qui a été ajouté dans l'API 23.Pour faire comme la réponse ci-dessus, vous pouvez remplacer la
onAttach
méthode de fragment:la source
DatabaseHelper
besoin d'unFragmentActivity
au lieu d'unActivity
? Par exemple, pour unAdapter
...onAttach(Activity activity)
vous devez la publier dansonDetach()
onAttach
méthode est obsolète,Overrides deprecated method in 'android.support.v4.app.Fragment'
Utilisez toujours la méthode getActivity () pour obtenir le contexte de votre activité attachée, mais souvenez-vous toujours d'une chose: les fragments sont légèrement instables et
getActivity
renvoient parfois la valeur null, donc pour cela, vérifiez toujours la méthode de fragment isAdded () avant de récupérer le contexte pargetActivity()
.la source
Le moyen le plus simple et le plus précis pour obtenir le contexte du fragment que j'ai trouvé est de l'obtenir directement à partir de la méthode
ViewGroup
lorsque vous appelezonCreateView
au moins ici, vous êtes sûr de ne pas obtenir la valeur null pourgetActivity()
:la source
Auparavant , j'utilise
onAttach (Activity activity)
pour obtenircontext
enFragment
La
onAttach (Activity activity)
méthode est obsolète au niveau de l'API 23.Maintenant, pour obtenir le contexte,
Fragment
nous pouvons utiliseronAttach (Context context)
context
.onCreate(Bundle)
sera appelé après cela.EXEMPLE DE CODE
REMARQUE
Nous pouvons également utiliser
getActivity()
pour obtenircontext
dansFragments
maisgetActivity()
peut revenirnull
si le votrefragment
est pas à un parentactivity
,la source
la source
Vous pouvez également obtenir le contexte du
inflater
paramètre lors de la substitutiononCreateView
.la source
Une autre approche alternative est:
Vous pouvez obtenir le contexte en utilisant:
la source
pour obtenir le contexte à l'intérieur du Fragment sera possible en utilisant
getActivity()
:Activity
associés au fragment à l'aidegetActivity()
, vous pouvez l'utiliser mais il n'est pas recommandé de provoquer des fuites de mémoire.Je pense qu'une meilleure approche doit être d'obtenir
Activity
laonAttach()
méthode:la source
Activity.findViewById
Est juste une méthode pratique pour rechercher une vue en vue de contenu enregistré de cette activité (ensemble à traverssetContentView
). Dans votre exemple correct, vous appelezView.findViewById
nonActivity.findViewById
, et vous appelez la méthode sur la vue racine correcte . Problème totalement différent, et vous ne pourrez évidemment pas trouver votre vue dans une recherche de vue qui ne contient pas cette vue.getContext()
est venu dans l'API 23. Remplacez-le par getActivity () partout dans le code.Voyez si cela corrige l'erreur. Essayez d'utiliser des méthodes qui se situent entre le niveau cible et le niveau API minimum, sinon cette erreur se produira.
la source
Depuis le niveau 23 de l'API, il existe,
getContext()
mais si vous souhaitez prendre en charge les anciennes versions, vous pouvez utilisergetActivity().getApplicationContext()
alors que je recommande toujours d'utiliser la version de supportFragment
qui estandroid.support.v4.app.Fragment
.la source
getActivity()
est un enfant de Context donc cela devrait fonctionner pour vousla source
Utiliser des fragments de la bibliothèque d'assistance -
puis remplacer
De cette façon, vous pouvez être sûr que le contexte sera toujours une valeur non nulle.
la source
Vous avez différentes options:
getActivity()
, car il s'agit d'unContext
.getContext()
.Si vous n'avez pas besoin de prendre en charge les anciennes versions, allez-y
getContext()
.la source
Pour Kotlin, vous pouvez utiliser
context
directement en fragments. Mais dans certains cas, vous trouverez une erreur commepour cela, vous pouvez le faire
la source
En kotlin, utilisez simplement
activity
au lieu degetActivity()
la source
Avec API 29+ sur Kotlin, je devais faire
Un exemple serait
la source
Idéalement, vous ne devriez pas avoir besoin d'utiliser des globaux. Le fragment a différentes notifications, l'une d'elles étant onActivityCreated. Vous pouvez obtenir l'instance de l'activité dans cet événement de cycle de vie du fragment.
Ensuite: vous pouvez déréférencer le fragment pour obtenir l'activité, le contexte ou le contexte d'application comme vous le souhaitez:
this.getActivity()
vous donnera le handle vers l'activitéthis.getContext()
vous donnera un handle vers le contextethis.getActivity().getApplicationContext()
vous donnera le handle vers le contexte de l'application. Vous devez de préférence utiliser le contexte de l'application lors de sa transmission à la base de données.la source
La manière la plus simple est d'utiliser
getActivity()
. Mais je pense que la confusion majeure de l'utilisation de lagetActivity()
méthode pour obtenir le contexte ici est une exception de pointeur nul.Pour cela, vérifiez d'abord la
isAdded()
méthode qui déterminera si elle est ajoutée ou non, puis nous pouvons utiliser legetActivity()
pour obtenir le contexte de l'activité.la source
Vous pouvez appeler
getActivity()
ou,la source
Vous pouvez utiliser la méthode getActivity () pour obtenir le contexte ou vous pouvez utiliser la méthode getContext ().
J'espère que ça aide!
la source
La méthode getContext () permet d'utiliser le contexte de la classe dans une activité de fragment.
la source
Je pense que vous pouvez utiliser
la source
la source
Vous pouvez également utiliser:
mais je préfère utiliser
ou
la source
J'ai besoin de contexte pour utiliser le fragment arrayAdapter IN, lorsque j'utilisais l' erreur getActivity , mais quand je le remplace par getContext, cela fonctionne pour moi
la source
Vous pouvez utiliser
getActivity()
ougetContext
en Fragment.Documentation
et
Conseil de pro
Vérifiez toujours
if(getActivity!=null)
car il peut être nul lorsque le fragment n'est pas attaché à l'activité. Parfois, une opération longue en fragment (comme la récupération de données à partir de l'api de repos) prend un certain temps. et si l'utilisateur accède à un autre fragment. Alors getActivity sera nul. Et vous obtiendrez NPE si vous ne l'avez pas géré.la source
FragmentHostCallback
classe.Sur toi fragment
En activité
la source
Un fragment intérieur pour un échantillon de kotlin aiderait quelqu'un
si vous utilisez la liaison de données;
Où bindingView est initialisé dans onCreateView comme ceci
la source
La méthode requireContext () est l'option la plus simple
Exemple
la source