¿Cómo puedo obtener el contexto en un fragmento?
Tengo que usar mi base de datos cuyo constructor toma en el contexto, pero getApplicationContext()y FragmentClass.thisno trabajo así que ¿qué puedo hacer?
Constructor de bases de datos
public Database(Context ctx)
{
this.context = ctx;
DBHelper = new DatabaseHelper(context);
}

getActivity().getApplicationContext()en una variable de instancia cuando se crea el fragmento y luego usar ese contexto siempre que lo desee dentro de la clase de fragmento. Ese contexto sobrevivirá a los desprendimientos de fragmentos.getActivitysiempre ha estado disponible. Es elgetContextque se agregó en la API 23.Para hacer como la respuesta anterior, puede anular el
onAttachmétodo de fragmento:fuente
DatabaseHelpernecesario un enFragmentActivitylugar de unActivity? Por ejemplo, para unAdapter...onAttach(Activity activity), debe publicarla enonDetach()onAttachmétodo ha quedado en desuso,Overrides deprecated method in 'android.support.v4.app.Fragment'Siempre use el método getActivity () para obtener el contexto de su actividad adjunta, pero siempre recuerde una cosa: los fragmentos son ligeramente inestables y
getActivitydevuelven valores nulos algunas veces, así que para eso, siempre verifique el método de fragmento isAdded () antes de obtener el contextogetActivity().fuente
La forma más fácil y precisa de obtener el contexto del fragmento que encontré es obtenerlo directamente desde el método
ViewGroupcuando llamaonCreateView, al menos aquí está seguro de que no quedará nulo paragetActivity():fuente
Anteriormente estoy usando
onAttach (Activity activity)para obtenercontextenFragmentEl
onAttach (Activity activity)método quedó en desuso en el nivel 23 de API.Ahora para obtener contexto
Fragmentpodemos usaronAttach (Context context)context.onCreate(Bundle)será llamado después de esto.CÓDIGO DE MUESTRA
NOTA
También podemos utilizar
getActivity()para conseguircontextenFragmentsperogetActivity()podemos volvernullsi el tufragmentno está conectado actualmente a un padreactivity,fuente
fuente
También puede obtener el contexto del
inflaterparámetro, al anularloonCreateView.fuente
Otro enfoque alternativo es:
Puede obtener el contexto usando:
fuente
para obtener el contexto dentro del Fragmento será posible usando
getActivity():Activityasociado con el fragmentogetActivity(), puede usarlo, pero no se recomienda porque causará pérdidas de memoria.Creo que un mejor enfoque debe ser obtener
ActivitydelonAttach()método:fuente
Activity.findViewByIdEs solo un método conveniente para buscar una vista en la vista de contenido registrado de esa actividad (configuradasetContentView). En su ejemplo correcto, está llamandoView.findViewById, noActivity.findViewById, e invocando el método en la vista raíz correcta . Problema totalmente diferente, y obviamente no podrá encontrar su vista en una jerarquía de vistas que no contenga esa vista.getContext()vino en API 23. Reemplácelo con getActivity () en todas partes del código.Vea si soluciona el error. Intente utilizar métodos que se encuentren entre el objetivo y el nivel mínimo de API; de lo contrario, se producirá este error.
fuente
Desde el nivel 23 de API existe,
getContext()pero si desea admitir versiones anteriores, puede usarlo,getActivity().getApplicationContext()pero aún así recomiendo usar la versión de soporteFragmentque esandroid.support.v4.app.Fragment.fuente
getActivity()es un niño de contexto, por lo que debería funcionar para ustedfuente
Usar fragmentos de la Biblioteca de soporte :
y luego anular
De esta manera, puede estar seguro de que el contexto siempre será un valor no nulo.
fuente
Tienes diferentes opciones:
getActivity(), ya que este es unContext.getContext().Si no necesita admitir versiones antiguas, vaya con
getContext().fuente
Para Kotlin puede usar
contextdirectamente en fragmentos. Pero en algunos casos encontrarás un error comopara eso puedes hacer esto
fuente
En kotlin solo use en
activitylugar degetActivity()fuente
Con API 29+ en Kotlin, tuve que hacer
Un ejemplo sería
fuente
Idealmente, no debería necesitar usar globals. El fragmento tiene notificaciones diferentes, una de ellas enActivityCreated. Puede obtener la instancia de la actividad en este evento de ciclo de vida del fragmento.
Luego: puede desreferenciar el fragmento para obtener actividad, contexto o contexto de aplicación como desee:
this.getActivity()le dará el identificador de la actividadthis.getContext()le dará un identificador del contextothis.getActivity().getApplicationContext()le dará el identificador del contexto de la aplicación. Preferiblemente debe usar el contexto de la aplicación al pasarlo a la base de datos.fuente
La forma simple es usar
getActivity(). Pero creo que la mayor confusión de usar elgetActivity()método para obtener el contexto aquí es una excepción de puntero nulo.Para esto, primero verifique con el
isAdded()método que determinará si se agrega o no, y luego podemos usar elgetActivity()para obtener el contexto de Actividad.fuente
Puedes llamar
getActivity()o,fuente
Puede usar el método getActivity () para obtener contexto o puede usar el método getContext ().
¡Espero que ayude!
fuente
El método getContext () ayuda a usar el contexto de la clase en una actividad de fragmento.
fuente
Creo que puedes usar
fuente
fuente
También puedes usar:
pero preferiría usar
o
fuente
Necesito contexto para usar el fragmento de arrayAdapter IN, cuando estaba usando el error getActivity ocurre pero cuando lo reemplazo con getContext funciona para mí
fuente
Puedes usar
getActivity()ogetContexten Fragment.Documentación
y
Consejo profesional
Compruebe siempre
if(getActivity!=null)porque puede ser nulo cuando el fragmento no está asociado a la actividad. A veces, realizar operaciones largas en fragmentos (como recuperar datos de la API de descanso) lleva algún tiempo. y si el usuario navega a otro fragmento. Entonces getActivity será nulo. Y obtendrá NPE si no lo manejó.fuente
FragmentHostCallbackclase.En tu fragmento
En la actividad
fuente
El fragmento interior para la muestra de Kotlin ayudaría a alguien
si usa enlace de datos;
Donde vinculanteView se inicializa en onCreateView como este
fuente
El método requireContext () es la opción más simple
Ejemplo
fuente