J'essaie d'utiliser viewPager avec le tablayout, mais lorsque je règle l'adaptateur avec le pager de vue, l'erreur "Java.lang.NullPointerException: une tentative d'appel de la méthode virtuelle 'Java.lang.Class est déclenchée. une référence d'objet null "Je ne comprends pas pourquoi cette erreur est affichée.
voir le pager set Adapter:
viewPager= (ViewPager) findViewById(R.id.viewPager_id);
viewPager.setAdapter(newViewPagerAdapterUseThisClass(getSupportFragmentManager(),14));
Adaptateur clss:
class ViewPagerAdapterUseThisClass extends FragmentPagerAdapter {
int countTabItem;
ViewPagerAdapterUseThisClass(FragmentManager fm,int contTabItem) {
super(fm);
this.countTabItem=contTabItem;
}
@Override
public Fragment getItem(int position) {
if(position==0){
EnthusamTab enthusamTab=new EnthusamTab();
return enthusamTab;
}
return null;
}
@Override
public int getCount() {
return countTabItem;
}
}
voir le fichier XML pager:
<Android.support.v4.view.ViewPager
Android:layout_width="match_parent"
Android:layout_height="match_parent"
Android:layout_below="@id/tab_layout_id"
Android:id="@+id/viewPager_id"/>
Journal d'erreur:
Java.lang.NullPointerException: Attempt to invoke virtual method 'Java.lang.Class Java.lang.Object.getClass()' on a null object reference
at Android.support.v4.app.BackStackRecord.doAddOp(BackStackRecord.Java:380)
at Android.support.v4.app.BackStackRecord.add(BackStackRecord.Java:375)
at Android.support.v4.app.FragmentPagerAdapter.instantiateItem(FragmentPagerAdapter.Java:103)
at Android.support.v4.view.ViewPager.addNewItem(ViewPager.Java:1034)
at Android.support.v4.view.ViewPager.populate(ViewPager.Java:1248)
at Android.support.v4.view.ViewPager.populate(ViewPager.Java:1116)
at Android.support.v4.view.ViewPager.onMeasure(ViewPager.Java:1642)
at Android.view.View.measure(View.Java:19861)
at Android.widget.RelativeLayout.measureChildHorizontal(RelativeLayout.Java:715)
at Android.widget.RelativeLayout.onMeasure(RelativeLayout.Java:461)
at Android.view.View.measure(View.Java:19861)
at Android.support.v4.widget.DrawerLayout.onMeasure(DrawerLayout.Java:1081)
at Android.view.View.measure(View.Java:19861)
at Android.view.ViewGroup.measureChildWithMargins(ViewGroup.Java:6083)
at Android.widget.FrameLayout.onMeasure(FrameLayout.Java:185)
at Android.support.v7.widget.ContentFrameLayout.onMeasure(ContentFrameLayout.Java:139)
at Android.view.View.measure(View.Java:19861)
at Android.view.ViewGroup.measureChildWithMargins(ViewGroup.Java:6083)
at Android.widget.LinearLayout.measureChildBeforeLayout(LinearLayout.Java:1464)
at Android.widget.LinearLayout.measureVertical(LinearLayout.Java:758)
at Android.widget.LinearLayout.onMeasure(LinearLayout.Java:640)
at Android.view.View.measure(View.Java:19861)
at Android.view.ViewGroup.measureChildWithMargins(ViewGroup.Java:6083)
at Android.widget.FrameLayout.onMeasure(FrameLayout.Java:185)
at Android.view.View.measure(View.Java:19861)
at Android.view.ViewGroup.measureChildWithMargins(ViewGroup.Java:6083)
at Android.widget.LinearLayout.measureChildBeforeLayout(LinearLayout.Java:1464)
at Android.widget.LinearLayout.measureVertical(LinearLayout.Java:758)
at Android.widget.LinearLayout.onMeasure(LinearLayout.Java:640)
at Android.view.View.measure(View.Java:19861)
at Android.view.ViewGroup.measureChildWithMargins(ViewGroup.Java:6083)
at Android.widget.FrameLayout.onMeasure(FrameLayout.Java:185)
at com.Android.internal.policy.DecorView.onMeasure(DecorView.Java:689)
at Android.view.View.measure(View.Java:19861)
at Android.view.ViewRootImpl.performMeasure(ViewRootImpl.Java:2275)
at Android.view.ViewRootImpl.measureHierarchy(ViewRootImpl.Java:1366)
at Android.view.ViewRootImpl.performTraversals(ViewRootImpl.Java:1619)
at Android.view.ViewRootImpl.doTraversal(ViewRootImpl.Java:1254)
at Android.view.ViewRootImpl$TraversalRunnable.run(ViewRootImpl.Java:6343)
at Android.view.Choreographer$CallbackRecord.run(Choreographer.Java:874)
at Android.view.Choreographer.doCallbacks(Choreographer.Java:686)
at Android.view.Choreographer.doFrame(Choreographer.Java:621)
at Android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.Java:860)
at Android.os.Handler.handleCallback(Handler.Java:751)
at Android.os.Handler.dispatchMessage(Handler.Java:95)
at Android.os.Looper.loop(Looper.Java:154)
at Android.app.ActivityThread.main(ActivityThread.Java:6126)
at Java.lang.reflect.Method.invoke(Native Method)
at com.Android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.Java:886)
at com.Android.internal.os.ZygoteInit.main(ZygoteInit.Java:776)
Cette exception se produit lorsque vous retournez la méthode null
à getItem(int position)
de PagerAdapter
.
Vous devez définir une valeur de retour (n) à la méthode getCount()
et renvoyer une méthode Fragment
à getItem(int position)
pour toutes les positions (0 .. n-1).
Par exemple, si vous renvoyez 3 de la méthode getCount()
, vous devez renvoyer une variable Fragment
non nulle pour les positions 0, 1 et 2 à la méthode getItem(int position)
. Si vous renvoyez une valeur nulle pour la position 0, 1 ou 2, vous obtiendrez:
Java.lang.NullPointerException: tentative d'appeler une méthode virtuelle 'Java.lang.Class Java.lang.Object.getClass ()' sur un objet null référence
private static class MyPagerAdapter extends FragmentPagerAdapter {
...
@Override
public int getCount() {
return 3;
}
@Override
public Fragment getItem(int position) {
switch (position) {
case 0:
return new XFragment();
case 1:
return new YFragment();
case 2:
return new ZFragment();
default:
return null; // Problem occurs at this condition!
}
}
}
Cette erreur survient généralement lorsque vous avez peu de fragments à retourner que le nombre spécifié. Comme par exemple, return count = 3 et vous renvoyez null en deuxième position. .__ Veuillez noter que count est un index basé sur zéro.
Retour pour tous les comptes. Essaye ça:
Override
public Fragment getItem(int position) {
EnthusamTab enthusamTab=new EnthusamTab();
return enthusamTab;
}
Selon ce que je vois, vous retournez null dans cette méthode:
@Override
public Fragment getItem(int position) {
if(position==0){
EnthusamTab enthusamTab=new EnthusamTab();
return enthusamTab;
}
return null;
}
Un problème est survenu pour retourner null dans la fonction de décompte de fragments
@Override
public Fragment getItem(int position) {
switch (position) {
case 0:
return new XFragment();
case 1:
return new YFragment();
case 2:
return new ZFragment();
default:
return null; // Problem occurs at this condition!
}
}
Ici le support externe se produit une erreur.
La réponse mentionnée ci-dessus est donc correcte et fonctionne.
public Fragment getItem(int position) {
if (position == 0) {
Tab1 tab1 = new Tab1();
return tab1;
}
if (position == 2) {
Tab2 tab2 = new Tab2();
return tab2;
} else {
Tab3 tab3 = new Tab3();
return tab3;
}
}
c'est la bonne réponse.