为了账号安全,请及时绑定邮箱和手机立即绑定

在使用带有ViewPager的选项卡时

在使用带有ViewPager的选项卡时

catspeake 2019-07-08 17:26:19
在使用带有ViewPager的选项卡时,获取错误“Java.lang.IllegalStateException活动已被销毁”我有一个应用程序,包括在选项卡模式中使用ActionBarSherlock,我有5个选项卡,每个选项卡的内容都是使用片段处理的。但是对于表2,我有一个片段,其中的XML文件包含一个ViewPager元素,而这个元素又有一些片段页。当我最初启动应用程序时,我能够在制表符之间切换没有问题,但是当我第二次按下表2时,我得到了上面提到的错误。主要活动如下:public class MainActivity extends SherlockFragmentActivity{     @Override     protected void onCreate(Bundle savedInstanceState)      {         super.onCreate(savedInstanceState);         setContentView(R.layout.activity_main);         ActionBar actionBar = getSupportActionBar();         ActionBar.Tab tab1 = actionBar.newTab().setText("Tab1");         ActionBar.Tab tab3 = actionBar.newTab().setText("Tab3");         ActionBar.Tab tab2 = actionBar.newTab().setText("Tab2");         ActionBar.Tab tab4 = actionBar.newTab().setText("Tab4");         ActionBar.Tab tab5 = actionBar.newTab().setText("Tab5");         Fragment fragment1 = new Tab1();         Fragment fragment3 = new Tab3();         Fragment fragment2 = new Tab2();         Fragment fragment5 = new Tab5();         Fragment fragment4 = new Tab4();         tab1.setTabListener(new MyTabListener(fragment1));         tab3.setTabListener(new MyTabListener(fragment3));         tab2.setTabListener(new MyTabListener(fragment2));         tab5.setTabListener(new MyTabListener(fragment5));         tab4.setTabListener(new MyTabListener(fragment4));         actionBar.addTab(tab1);         actionBar.addTab(tab2);         actionBar.addTab(tab3);         actionBar.addTab(tab4);         actionBar.addTab(tab5);          actionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS);     }从我在不同地方读到的内容来看(如果我错了,请纠正我),这是因为第二遍中的片段管理器试图重用活动中的片段,这已经不存在了,从而产生了错误,但我不知道为什么会在这里发生这种情况,因为我没有使用片段活动。根据logcat,错误出现在表2类中,onViewCreated方法的行上写着mViewPager.setAdapter(mMyFragmentPagerAdapter).任何帮助都是非常感谢的.谢谢。
查看完整描述

3 回答

?
收到一只叮咚

TA贡献1821条经验 获得超4个赞

这似乎是新添加的对嵌套片段的支持中的一个bug。基本上,孩子FragmentManager当与活动分离时,其内部状态会中断。为我解决这个问题的一个短期解决办法是添加以下内容onDetach()每一个Fragment你称之为getChildFragmentManager()关于:

@Overridepublic void onDetach() {
    super.onDetach();

    try {
        Field childFragmentManager = Fragment.class.getDeclaredField("mChildFragmentManager");
        childFragmentManager.setAccessible(true);
        childFragmentManager.set(this, null);

    } catch (NoSuchFieldException e) {
        throw new RuntimeException(e);
    } catch (IllegalAccessException e) {
        throw new RuntimeException(e);
    }}


查看完整回答
反对 回复 2019-07-08
?
慕田峪4524236

TA贡献1875条经验 获得超5个赞

我也有同样的问题。我找到的唯一解决办法是,每次更改选项卡时,用一个新实例替换这些片段。

ft.replace(R.id.fragment_container, Fragment.instantiate(PlayerMainActivity.this, fragment.getClass().getName()));

不是真正的解决方案,但我还没有找到重用上一个片段实例的方法.


查看完整回答
反对 回复 2019-07-08
  • 3 回答
  • 0 关注
  • 442 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信