Android实现TabLayout时报NullPointerException空指针异常求助
问题修复方案
错误原因
- 控件初始化逻辑错误:你声明的
tabLayout、viewPager变量未完成赋值就调用了其findViewById方法,此时变量是空值,触发空指针异常。正确的初始化需要调用Activity自带的findViewById方法查找布局控件,再赋值给对应变量。 - 绑定逻辑顺序错误:
tabLayout.setupWithViewPager()需要在ViewPager设置完Adapter之后再调用,否则TabLayout无法读取ViewPager的页面配置。
修复后代码
MainActivity.java 完整修正代码
public class MainActivity extends AppCompatActivity { private TabLayout tabLayout; private ViewPager viewPager; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); // 修正控件初始化写法 tabLayout = findViewById(R.id.tabLayout); viewPager = findViewById(R.id.viewPager); VPAdapter vpAdapter = new VPAdapter(getSupportFragmentManager(), FragmentPagerAdapter.BEHAVIOR_RESUME_ONLY_CURRENT_FRAGMENT); vpAdapter.addFragment(new statistics(),"Statistics"); vpAdapter.addFragment(new connectivity(),"Connectivity"); vpAdapter.addFragment(new maskSensor(),"Mask Sensor"); viewPager.setAdapter(vpAdapter); // 调整绑定逻辑到setAdapter之后 tabLayout.setupWithViewPager(viewPager); } }
额外优化建议
布局文件中声明的三个TabItem属于冗余代码,调用setupWithViewPager方法后,TabLayout会自动读取VPAdapter中getPageTitle返回的标题生成对应Tab,不会复用布局中预先定义的TabItem,可直接删除避免冗余。
内容的提问来源于stack exchange,提问作者Rezafauzan1945
相关产品推荐
相关产品推荐

