1. ホーム
  2. アンドロイド

Android ViewPager のエラーです。NULLオブジェクトの参照で仮想メソッドxxxを呼び出そうとした

2022-02-10 10:03:23

AndroidでTabLayoutを作成し、タブをクリックすると、以下のエラーが発生します。

java.lang.NullPointerException: NULLオブジェクトの参照に対して仮想メソッド 'java.lang.Class java.lang.Object.getClass()' を呼び出そうとしました。

コード

tabLayout.addOnTabSelectedListener(new TabLayout.OnTabSelectedListener() {
    @Override
    public void onTabSelected(TabLayout.Tab tab) {
        viewPager.setCurrentItem(tab.getPosition()); // error line, test viewPager and tab are not empty
    }
    //...
});

むしろ奇妙なことに、エラーを報告する行には両方の変数が印刷されており、NULLではありません。

ネットで調べたところ、ViewPagerのAdapterに問題があることがわかりました。TabLayoutには3つのタブがあり、Adapterには2つしか定義されていないので数が合わず、エラーになるのだそうです。

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

//Adapter in
@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の残りのタブを埋めるだけです。

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

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