android - java.lang.Class java.lang.Object.getClass() ''en una referencia de objeto nula
xml nullpointerexception (8)
De acuerdo con lo que veo que estás devolviendo nulo en este método:
@Override
public Fragment getItem(int position) {
if(position==0){
EnthusamTab enthusamTab=new EnthusamTab();
return enthusamTab;
}
return null;
}
Intento usar viewPager con tablayout, pero cuando configuro el adaptador con el paginador de vista, obtengo el error "java.lang.NullPointerException: intento invocar el método virtual ''java.lang.Class java.lang.Object.getClass () on una referencia de objeto nula "no entiendo por qué se muestra este error.
ver el adaptador del sistema del paginador:
viewPager= (ViewPager) findViewById(R.id.viewPager_id);
viewPager.setAdapter(newViewPagerAdapterUseThisClass(getSupportFragmentManager(),14));
Adaptador 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;
}
}
Ver archivo pager xml:
<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"/>
Registro de errores:
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)
Esta excepción se produce cuando devuelve null
al getItem(int position)
de PagerAdapter
.
getCount()
establecer un valor de retorno (n) en el método getCount()
y devolver un Fragment
en el getItem(int position)
para todas las getItem(int position)
(0 .. n-1).
Por ejemplo, si devuelve 3 desde el método getCount()
, entonces debe devolver un Fragment
no nulo para las posiciones 0, 1 y 2 en el getItem(int position)
. Si devuelve un nulo para la posición 0, 1 o 2, obtendrá:
java.lang.NullPointerException: intento invocar el método virtual ''java.lang.Class java.lang.Object.getClass ()'' en una referencia de objeto nula
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!
}
}
}
Este error generalmente ocurre cuando tiene pocos fragmentos para devolver que el conteo especificado. Como por ejemplo, regresando cuenta = 3, y devuelve nulo en la segunda posición. Tenga en cuenta que cuenta es un índice basado en cero.
Este tipo de excepción solo ocurre cuando intenta usar el método getCount()
para devolver el valor más de lo que se inicializa en las pestañas. Cambie su valor de retorno.
Regreso para todas las cuentas. Prueba esto:
Override
public Fragment getItem(int position) {
EnthusamTab enthusamTab=new EnthusamTab();
return enthusamTab;
}
Se está produciendo un problema para volver nulo en la función de recuento de fragmentos.
@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!
}
}
Aquí el soporte exterior se produce un error.
Así que la respuesta mencionada es correcta y está funcionando.
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;
}
}
responde bien.
Trate de hacer esto en getCount
, cuente todos los fragmentos que tiene: como 1..5
@Override
public int getCount() {
return 5; //her
}
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;
}
}