Je crée un adaptateur pour tableau pour une vue en liste, Tout fonctionne correctement, j'ai 2 fragments et 2 boutons en haut de la barre d'action qui changent entre ces 2 fragments . Mon problème est que je tombe en panne. si je bouge trop vite entre ces frags, lorsque j'ouvre fragOne, passez à fragTwo, puis revenez rapidement à fragOne .. fragOne jette un NPE depuis le contexte de getActivity ..
c'est la ligne qui se bloque:
adapter = new MainFragmentDocumentAdapter(getActivity(), docsList, DocumentsFragment.this, page);
le journal de bord:
E/AndroidRuntime﹕ FATAL EXCEPTION: main
Process: com.bbb.app, PID: 17438
Java.lang.NullPointerException: Attempt to invoke virtual method 'Java.lang.Object Android.content.Context.getSystemService(Java.lang.String)' on a null object reference
at Android.widget.ArrayAdapter.init(ArrayAdapter.Java:310)
at Android.widget.ArrayAdapter.<init>(ArrayAdapter.Java:104)
at com.bbb.app.UI.adapters.MainFragmentDocumentAdapter.<init>(MainFragmentDocumentAdapter.Java:51)
aucune idée de comment puis-je résoudre ce problème?
Donc, après de nombreuses vérifications, j'ai découvert que le problème était que je retournais dans ce fragment alors que je me trouvais dans un fragment différent, car un auditeur l'a signalé et a essayé d'ouvrir cette méthode.
fondamentalement, je viens de l'envelopper dans un
if (getActivity() != null) {
// Code goes here.
}
et problème résolu.
merci beaucoup pour toute l'aide les gars!
si vous êtes sur un fragment, vérifiez si le fragment est ajouté.
{
...
if (!this.isAdded()) { //this = current fragment
return;
}
LocationManager locationManager = (LocationManager) getActivity().getSystemService(Context.LOCATION_SERVICE);
...
}
vous pouvez faire comme ça.
activité interne
public static UsageRecommendationTabActivity getInstance() {
return activityInstance;
}
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
activityInstance=this;
}
fragment intérieur
@Override
public void onAttach(Activity activity) {
// TODO Auto-generated method stub
super.onAttach(activity);
if (activity instanceof UsageRecommendationTabActivity)
mParentActivity = (UsageRecommendationTabActivity) activity;
if (mParentActivity == null)
mParentActivity = UsageRecommendationTabActivity.getInstance();
}
puis appelez votre adaptateur
adapter = new MainFragmentDocumentAdapter(mParentActivity, docsList, DocumentsFragment.this, page);
Ajouter une vérification pour getContext ()! = Null
Avant bloc
mAdapter = new SimpleHomeItemAdapter(getActivity(), mList);
listview.setAdapter(mAdapter);
Par exemple:
if (getActivity()!=null){
mAdapter = new SimpleHomeItemAdapter(getActivity(), mList);
listview.setAdapter(mAdapter);
}