Question Utilisation du contexte dans un fragment


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 fonctionne pas alors que puis-je faire?

Constructeur de base de données

public Database(Context ctx)
{
    this.context = ctx;
    DBHelper = new DatabaseHelper(context);
}

555
2017-11-21 16:46


origine


Réponses:


Vous pouvez utiliser getActivity(), qui renvoie l'activité associée à un fragment.
L'activité est un contexte (puisque l'activité étend le contexte).


1156
2017-11-21 16:52



Pour faire comme la réponse ci-dessus, vous pouvez remplacer le onAttach méthode de fragment:

public static class DummySectionFragment extends Fragment{
...
    @Override
    public void onAttach(Activity activity) {
        super.onAttach(activity);
        DBHelper = new DatabaseHelper(activity);
    }
}

116
2017-10-25 16:24



Toujours utiliser le getActivity () méthode pour obtenir le contexte de votre activité ci-joint, mais rappelez-vous toujours une chose: les fragments sont légèrement instables et getActivity renvoie null quelques fois, donc pour cela, vérifiez toujours le est ajouté() méthode de fragment avant d'obtenir le contexte par getActivity().


19
2018-03-04 14:31



La façon la plus simple et la plus précise d'obtenir le contexte du fragment que j'ai trouvé est de l'obtenir directement ViewGroup quand vous appelez onCreateView méthode au moins ici, vous êtes sûr de ne pas obtenir null pour getActivity():

public class Animal extends Fragment { 
  Context thiscontext;
  @Override
  public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState)
  {
    thiscontext = container.getContext();

14
2018-02-05 15:15



@Override
public void onAttach(Activity activity) {
    // TODO Auto-generated method stub
    super.onAttach(activity);
    context=activity;
}

8
2018-06-17 06:00



pour obtenir le contexte à l'intérieur du Fragment sera possible en utilisant getActivity() :

public Database()
{
    this.context = getActivity();
    DBHelper = new DatabaseHelper(this.context);
}
  • Soyez prudent, pour obtenir le Activity associé au fragment en utilisant getActivity(), vous pouvez l'utiliser, mais n'est pas recommandé, cela entraînera des fuites de mémoire.

Je pense qu'une meilleure approche doit être le Activity du onAttach() méthode:

@Override
public void onAttach(Activity activity) {
    super.onAttach(activity);
    context = activity;
}

5
2017-12-05 22:49



Une autre approche alternative est:

Vous pouvez obtenir le contexte en utilisant:

getActivity().getApplicationContext();

4
2018-03-17 10:33



Vous pouvez également obtenir le contexte de la inflater paramètre, en cas de dépassement onCreateView.

public static class MyFragment extends Fragment {
    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                                 Bundle savedInstanceState) {
        /* ... */
        Context context = inflater.getContext();
        /* ... */
    }
}

3
2017-11-19 05:39



getContext() est venu dans l'API 23. Remplacez-le par getActivity () partout dans le code.

Voir si cela corrige l'erreur. Essayez d'utiliser des méthodes qui se situent entre le niveau API cible et minimun, sinon cette erreur se produira.


3
2017-10-26 10:08



Depuis le niveau d'API 23, il y a getContext() mais si vous voulez soutenir les anciennes versions, vous pouvez utiliser getActivity().getApplicationContext() alors que je recommande encore d'utiliser la version de support de Fragment lequel est android.support.v4.app.Fragment.


3
2018-06-19 09:57