制作Android中的TabLayout,点击某个tab时报错:

java.lang.NullPointerException: Attempt to invoke virtual method 'java.lang.Class java.lang.Object.getClass()' on a null object reference

代码:

tabLayout.addOnTabSelectedListener(new TabLayout.OnTabSelectedListener() {
    @Override
    public void onTabSelected(TabLayout.Tab tab) {
        viewPager.setCurrentItem(tab.getPosition()); //报错行,实测viewPager和tab都不为空
    }
    //...
});

比较奇怪,报错的一行,两个变量都打印了,并不为空。

网上查到了信息,原来是ViewPager的Adapter的问题:TabLayout中有3个Tab,而Adapter中只定义了两个,数量不符,因此报错。

//Activity中
tabLayout.addTab(tabLayout.newTab().setText("Home"));
tabLayout.addTab(tabLayout.newTab().setText("Sport"));
tabLayout.addTab(tabLayout.newTab().setText("Movie"));

//Adapter中
@Override
public Fragment getItem(int position) {
    switch (position) {
       case 0:
           FragHome homeFragment = new FragHome();
           return homeFragment;
       case 1:
           FragSport sportFragment = new FragSport();
           return sportFragment;
      
        default:
            return null;
     }
}

解决办法很简单,在Adapter中补齐剩下的一个tab即可:

case 0: ...
case 1: ...                
case 2: ...        

 

参考:https://stackoverflow.com/questions/41826639/java-lang-class-java-lang-object-getclass-on-a-null-object-reference/50901685