Fragment中的ViewPager导致NullPointerException

时间:2014-03-03 16:19:56

标签: android android-fragments nullpointerexception android-viewpager

我想在ViewPager中使用Fragment并获取

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;
        }
    }
}

1 个答案:

答案 0 :(得分:1)

您正在遇到NullPointerException,因为您当时在对象上调用NULL 的方法。

这可能是因为你的

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

方法之前调用

    @Override
    public void onAttach(Activity activity) { }

方法,因此,您的变量mFragmentActivity NULL 。在这种情况下,您的代码

String.valueOf(mFragmentActivity);

将抛出NullPointerException