android get activity retourne null
Je suis à l'aide de la Barre d'Action sur une Activité. Pour chaque Onglet, je suis en train de montrer une présentation différente. Depuis la mise en page est trop lourde. Je suis donc gonfler chaque mise en page en vue. Sur chaque Onglet, sélectionnez
public void onTabSelected(Tab tab, FragmentTransaction ft) {
if (mView == null) {
mView = LayoutInflater.from(mAct).inflate(mLayout, null); //mAct is Activity reference
}
mAct.setContentView(mView);
for (int i = 0; i < mFrags.length; i++) {
mFrags[i] = (LutronFragment) mAct.getFragmentManager()
.findFragmentById(mIds[i]);
if (mFrags[i] != null) {
mFrags[i].setupHeader();
}
}
}
public void onTabUnselected(Tab tab, FragmentTransaction ft) {
for (Fragment f : mFrags) {
try {
if (f != null) {
ft.remove(f);
}
} catch (IllegalStateException e) {
e.printStackTrace();
}
}
}
Alors Maintenant, si je choisis l'onglet deuxième fois et faire une opération sur cet Onglet, l'app d'obtenir s'est écrasé sur getActivity.(NullPointerException)
Veuillez indiquer si il y en a une autre approche de cache de lourds disposition.
source d'informationauteur Ashu Dubey
Vous devez vous connecter pour publier un commentaire.
Le problème est probablement que vous êtes en utilisant un vieux Fragment qui a été détachée de votre Activité.
Donc, la première fois que vous créez votre Fragment, il est connecté à votre activité. Tout est bon. Puis, quand vous changer d'onglet, votre fragment pourrait ou ne pourrait pas être détaché de l'activité. Lors de l'onglet en arrière, l'ancien fragment peut être détachée de l'activité et donc
getActivity()
renvoie la valeur null.Cela peut se produire si vous essayez de garder les références à vos Fragments, plutôt que d'y accéder via le
FragmentManager
.Il peut également se produire si votre adaptateur est de retourner une référence à un fragment plutôt que d'un nouveau fragment. Je suis tombé dans ce piège.
(Affichage du code où vous créez vos fragments peuvent aider)
Modifier
Peut-être avoir un coup d'oeil à cette et comment ils créent ajouter leur ActionBar auditeurs. Vous avez besoin de la portée de votre Activité. La façon de le faire est de définir l'auditeur dans l'Activité/Fragment (via la mise en œuvre d'une interface) et puis l'attacher à l'Onglet. Cela va vous donner la portée et est probablement une façon plus stable de faire les choses.
Cela peut se produire si vous créez un objet anonyme à l'intérieur d'un fragment d'appels
getActiviy()
. SigetActivity()
est appelé dans l'objet anonyme après le fragment est sauté le fragment de la pile,getActivity()
retournera null. À ce stade, le fragment n'est plus associé à une activité.