2016-10-03 125 views
0

我想通過該方法無法設置FragmentStatePagerAdapter在ViewPager

viewPager.setAdapter(myPagerAdapter); 

設置在ViewPager FragmentStatePagerAdapter的子類的對象,但我如下

java.lang.NullPointerException: Attempt to invoke virtual method 'void android.support.v4.app.Fragment.setMenuVisibility(boolean)' on a null object reference 
                 at android.support.v4.app.FragmentStatePagerAdapter.instantiateItem(FragmentStatePagerAdapter.java:120) 
                 at android.support.v4.view.ViewPager.addNewItem(ViewPager.java:1006) 
                 at android.support.v4.view.ViewPager.populate(ViewPager.java:1154) 
                 at android.support.v4.view.ViewPager.populate(ViewPager.java:1088) 
                 at android.support.v4.view.ViewPager.onMeasure(ViewPager.java:1614) 

請幫我得到了錯誤解決這個問題。

的代碼片段是

public class MainActivity extends AppCompatActivity { 

     Toolbar toolbar; 
     TabLayout tabLayout; 
     ViewPager viewPager; 
     @Override 
     protected void onCreate(Bundle savedInstanceState) { 
      super.onCreate(savedInstanceState); 
      setContentView(R.layout.activity_main); 
      toolbar = (Toolbar)findViewById(R.id.toolbar); 
      toolbar.setTitle("My App"); 
      toolbar.setSubtitle("this is my test"); 
      tabLayout = (TabLayout)findViewById(R.id.tablayout); 
      tabLayout.addTab(tabLayout.newTab().setText("Left")); 
      tabLayout.addTab(tabLayout.newTab().setText("Cent")); 
      tabLayout.addTab(tabLayout.newTab().setText("Right")); 

      viewPager = (ViewPager)findViewById(R.id.viewpage); 

      MyPagerAdapter myPagerAdapter = new MyPagerAdapter(
        getSupportFragmentManager(), 
        tabLayout.getTabCount() 
      ); 
      viewPager.setAdapter(myPagerAdapter); 
      //viewPager.addOnPageChangeListener(new TabLayout.TabLayoutOnPageChangeListener(tabLayout)); 
     } 
    } 

public class MyPagerAdapter extends FragmentStatePagerAdapter { 
    int tabCount; 
    public MyPagerAdapter(FragmentManager fm, int tabCount) { 
     super(fm); 
     this.tabCount = tabCount; 
    } 

    @Override 
    public Fragment getItem(int position) { 
     switch (position){ 
      case 1: 
       Fragment1 fragment1 = new Fragment1(); 
       return fragment1; 
      case 2: 
       Fragment2 fragment2 = new Fragment2(); 
       return fragment2; 
      case 3: 
       Fragment3 fragment3 = new Fragment3(); 
       return fragment3; 
      default: 
       return null; 
     } 
    } 

    @Override 
    public int getCount() { 
     return tabCount; 
    } 
} 
+3

發佈您的代碼,以便我們可以看到發生了什麼。 –

+1

您能否發佈您的PagerAdapter類的片段? –

+0

看起來您已將空片段添加到適配器中 –

回答

2

setUpViewPager()遵循雖然你或許應該使用tabLayout.setupWithViewPager(viewPager);

這裏是你忘了名單在位置0開始的索引問題

switch (position){  
    // case 1, 2, 3...  
    default: 
     return null; // Here 

?您已經返回空片段

+0

這是最完美的答案。但標題未設置爲選項卡。 –

+0

非常感謝。 –

+0

歡迎。您可以通過[接受答案](http://stackoverflow.com/help/someone-answers) –

0

嘗試以下。

MyPagerAdapter.java

public class MyPagerAdapter extends FragmentStatePagerAdapter { 
    private Context mContext; 

    private List<Fragment> mFragments = new ArrayList<>(); 

    public FragmentPagerAdapter(Context context, FragmentManager fm) { 
     super(fm); 
     this.mContext = context; 
    } 

    public void addFragment(Fragment fragment) { 
     mFragments.add(fragment); 
    } 

    @Override 
    public Fragment getItem(int position) { 
     return mFragments.get(position); 
    } 

    @Override 
    public int getCount() { 
     return mFragments.size(); 
    } 
} 

在您的MainActivity,

private void setUpViewPager(ViewPager viewPager) { 
     adapterViewPager = new MyPagerAdapter(getApplicationContext(), getSupportFragmentManager()); 
     adapterViewPager.addFragment(new AFragment()); 
     viewPager.setAdapter(adapterViewPager); 
     viewPager.addOnPageChangeListener(new ViewPager.OnPageChangeListener() { 
      @Override 
      public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) { 
      } 

      @Override 
      public void onPageSelected(int position) { 
      } 

      @Override 
      public void onPageScrollStateChanged(int state) { 
      } 
     }); 
    } 

private void setUpTabLayout(TabLayout tabLayout) { 
     tabLayout.setupWithViewPager(viewPager); 
     for (int i = 0; i < tabLayout.getTabCount(); i++) { 
      TabLayout.Tab tab = tabLayout.getTabAt(i); 
      //set your tab text, image etc here. 
     } 
     tabLayout.requestFocus(); 
    } 

然後在你的onCreate(),只需使用相應的方法。通過setUpTabLayout()

+0

請參考板球的答案。 –