FragmentStatePagerAdapter Null Exception

时间:2014-08-07 16:55:15

标签: java android android-fragments fragment adapter

我有两个包含ViewPager的片段。包含viewPager的第一个片段非常有效。当我来到包含ViewPager的第二个片段时,我开始得到FragmentStatePagerAdapter NullException。我知道是什么问题,我需要实现onDetach函数来摆脱这个问题。我在互联网上搜索,有很多解决方案。我目前正在使用API​​ 19.所以也许这个解决方案非常适合我。但我不知道如何使用该解决方案。

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

什么是mFragment1和mFragment2以及R.id.main?

片段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());
    ...
    }
}

片段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());
        ...
    }
}

我使用幻灯片动画片段

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());

来源: Click here to view the source

1 个答案:

答案 0 :(得分:0)

看起来问题是您手动使用FragmentTransaction来更改片段。当您为其提供适配器时,ViewPager会自动执行此操作,因此当您更改片段时,您将尝试删除已删除的片段。