简体   繁体   中英

FragmentStatePagerAdapter NullException

I have two fragments that contains ViewPager. The first fragment that contain viewPager works very well. As I come to second fragment that contain ViewPager, I start to get FragmentStatePagerAdapter NullException. I knew what is the problem, I need to implement onDetach function to get rid this problem. I search around the internet, there is a lots of solutions. And I'm currently using API 19. So maybe this solution very suitable for me. But I don't know how to use the solution.

getSupportFragmentManager().beginTransaction().detach(mFragment1).replace(R.id.main, mFragment2).attach(mFragment2).addToBackStack(null).commit();

What is exactly mFragment1 and mFragment2 and R.id.main ?

Fragment 1

public class fragment1 extends fragment {
    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
    Bundle savedInstanceState) {
    super.onCreateView(inflater, container, savedInstanceState);
    View v = inflater.inflate(R.layout.fragment_restaurantprocess, container, false);
    adapter = new RestaurantProcessPageAdapter(getActivity().getSupportFragmentManager());
    ...
    }
}

Fragment 2

public class fragment2 extends fragment {
    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
        Bundle savedInstanceState) {
        super.onCreateView(inflater, container, savedInstanceState);
        View v = inflater.inflate(R.layout.fragment_feedpage, container, false);
        adapter = new RestaurantFeedPageFragment(getActivity().getSupportFragmentManager());
        ...
    }
}

I'm using slide animation to fragment

public void changeFragment_toRight(Fragment frag) /* Slide to right screen */ {
    if (getSupportFragmentManager().findFragmentByTag("frag")!=null) 
        getSupportFragmentManager().beginTransaction().setCustomAnimations(R.anim.right_slide_in, R.anim.right_slide_out).replace(R.id.container, frag, "frag").commit();
    else
        getSupportFragmentManager().beginTransaction().add(R.id.container, frag, "frag").commit();  
    }
    changeFragment_toRight(new fragment1());
    changeFragment_toRight(new fragment2());

Source: Click here to view the source

It looks like the problem is that you are manually using a FragmentTransaction to change fragments. A ViewPager will do this automatically when you supply it with an adapter, so when you change fragments, you are trying to remove a fragment that has already been removed.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM