制作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: ...