我有两个包含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());
答案 0 :(得分:0)
看起来问题是您手动使用FragmentTransaction来更改片段。当您为其提供适配器时,ViewPager会自动执行此操作,因此当您更改片段时,您将尝试删除已删除的片段。