我有两个包含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());资料来源: 单击此处查看源
发布于 2014-08-07 17:02:14
看起来问题在于您正在手动使用FragmentTransaction来更改片段。当您向ViewPager提供适配器时,它将自动完成此操作,因此,当您更改片段时,您将尝试删除已经删除的片段。
https://stackoverflow.com/questions/25188100
复制相似问题