Pregunta Usar el contexto en un fragmento


¿Cómo puedo obtener el contexto en un fragmento?

Necesito usar mi base de datos cuyo constructor toma en el contexto, pero getApplicationContext() y FragmentClass.this no funciona, ¿qué puedo hacer?

Constructor de base de datos

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

555
2017-11-21 16:46


origen


Respuestas:


Puedes usar getActivity(), que devuelve la actividad asociada con un fragmento.
La actividad es un contexto (dado que la Actividad amplía el contexto).


1156
2017-11-21 16:52



Para hacer como la respuesta anterior, puede anular el onAttach método de fragmento:

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



Usa siempre el getActivity () método para obtener el contexto de su actividad adjunta, pero siempre recuerde una cosa: los fragmentos son ligeramente inestables y getActivity devuelve null algunas veces, así que para eso, siempre revise el está agregado() método de fragmento antes de obtener el contexto por getActivity().


19
2018-03-04 14:31



La manera más fácil y más precisa de obtener el contexto del fragmento que encontré es obtenerlo directamente del ViewGroup cuando usted llama onCreateView método al menos aquí está seguro de no obtener nulo para 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



para obtener el contexto dentro del Fragmento será posible usar getActivity() :

public Database()
{
    this.context = getActivity();
    DBHelper = new DatabaseHelper(this.context);
}
  • Tenga cuidado, para obtener el Activity asociado con el fragmento usando getActivity(), puede usarlo, pero no se recomienda, causará fugas de memoria.

Creo que un mejor enfoque debe ser obtener el Activity desde el onAttach() método:

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

5
2017-12-05 22:49



Otro enfoque alternativo es:

Puedes obtener el contexto usando:

getActivity().getApplicationContext();

4
2018-03-17 10:33



También puedes obtener el contexto del inflater parámetro, al anular 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() entró en API 23. Reemplácelo con getActivity () en todas partes del código.

Ve si arregla el error. Intenta usar métodos que estén entre el objetivo y el nivel mínimo de la API; de lo contrario, este error se aplicará.


3
2017-10-26 10:08