0

我試圖使用ViewPager一個Fragment內得到內片段ViewPager導致NullPointerException異常

03-01 15:23:05.375 3937-3937/com.example.android.navigationdrawerexample E/AndroidRuntime﹕ FATAL EXCEPTION: main 
java.lang.NullPointerException 
     at com.example.android.navigationdrawerexample.SpaFragment.onCreateView(SpaFragment.java:50) 
     at android.app.Fragment.performCreateView(Fragment.java:1695) 

代碼:

public class SpaFragment extends Fragment { 

    public SpaFragment(){} 
    private SpaList mSpa; 
    private TabHost tabs; 

    private FragmentActivity mFragmentActivity; 
    private View rootView; 

    public void setSpa(SpaList s) 
    { 
     mSpa=s; 
    } 


    @Override 
    public View onCreateView(LayoutInflater inflater, ViewGroup container, 
          Bundle savedInstanceState) { 
     rootView = inflater.inflate(R.layout.fragment_spa, container, false); 

     ViewPager pager = (ViewPager) rootView.findViewById(R.id.pager); 
     pager.setAdapter(new MyPagerAdapter(mFragmentActivity.getSupportFragmentManager())); 

     return rootView; 
    } 

    @Override 
    public void onAttach(Activity activity) { 
     mFragmentActivity = (FragmentActivity) activity; 
     Log.d("ACTIVITY on attach"+mFragmentActivity,"\n"); 
     super.onAttach(activity); 
    } 

    private class MyPagerAdapter extends FragmentPagerAdapter { 

     public MyPagerAdapter(FragmentManager fm) { 
      super(fm); 
     } 


     @Override 
     public CharSequence getPageTitle(int position) { 
      return "Title " + position; 
     } 

     @Override 
     public android.support.v4.app.Fragment getItem(int pos) { 
      switch(pos) { 

       case 0: return FirstFragment.newInstance("FirstFragment, Instance 1"); 
       case 1: return SecondFragment.newInstance("SecondFragment, Instance 1"); 
       default: return FirstFragment.newInstance("ThirdFragment, Default"); 
      } 
     } 

     @Override 
     public int getCount() { 
      return 2; 
     } 
    } 
} 
+0

刪除'Log.d( 「上創建活動」,將String.valueOf(mFragmentActivity));' –

+0

我們需要您的logcat的輸出。 –

+0

我刪除Log.d,仍然得到同樣的錯誤 – SERG

回答

1

您正在運行到一個NullPointerException因爲你是上調用的方法當時爲NULL的對象。

這可能是因爲你的

@Override 
    public View onCreateView(LayoutInflater inflater, ViewGroup container, 
          Bundle savedInstanceState) { 
     // ... 
    } 

方法是之前叫你

@Override 
    public void onAttach(Activity activity) { } 

方法,因此,你的變量mFragmentActivityNULL。在這種情況下,你的代碼

String.valueOf(mFragmentActivity); 

將拋出一個NullPointerException

+0

@PJ這就是讀音字講起有關。 –

+0

我刪除了Log.d,仍然得到相同的錯誤。我如何將ref傳給Activity之前的onCreateView? – SERG

+0

您還需要去掉這一行:pager.setAdapter(新MyPagerAdapter(mFragmentActivity.getSupportFragmentManager())); 只需在您的onCreateView()方法內調用getActivity()。 –

相關問題