2016-10-25 150 views
0
  • 我正在做一个带有多个选项卡的Android应用程序,假设 有2个选项卡。一个选项卡是一个“android.support.v4.app.Fragment”,其中 包含几个文本框和一个按钮,另一个是“android.app.Fragment”,同时是MapFragment的一个 。
  • 事情是,第一个水龙头呼叫另一个 “android.support.v4.app.Fragment”cardview(也支持)和 他们可以在它们之间导航一些层次结构。
  • 现在如果先在地图上点击一下,然后再点击其他标签,最后我点击按钮去看包含 cardviews的框架,我可以看到这些但是在后台我也看到了 MapFragment。
  • 我不知道如何解决这个问题。我试图使用替换,删除, 添加,popBackStack,...此外,我曾试图从 rootview删除片段的框架,但没有发生任何事情。
  • 事实是,我要把你的笔记本电脑扔出窗外。

在此先感谢!Android片段保持背景

回答

0

那么我知道发生了什么事。这是由于与两个不同的片段管理器(FragmentManagerSupportFragmentManager)一起工作。
取决于您想要删除或替换的片段类型(支持或常规),您必须使用一个或另一个片段管理器。
我创建了一个枚举来知道什么类型的片段是活动的(为了移除)以及要开始什么样的片段(为了替换)。
更多或更少的我了这样的函数:

private void manageFragment (FragmentEnum nextFragment) { 

     switch (activedFragment) { 
      case SUPPORT: 
       getSupportFragmentManager().beginTransaction().remove(fragmentSupport).commit(); 
       break; 
      case NORMAL: 
       getFragmentManager().beginTransaction().remove(fragmentNormal).commit(); 
       break; 
     } 

     activedFragment = nextFragment; 

     switch (nextFragment) { 
      case SUPPORT: 
       getSupportFragmentManager().beginTransaction().replace(R.id.fragment_container, fragmentSupport).commit(); 
       break; 
      case NORMAL: 
       getFragmentManager().beginTransaction().replace(R.id.fragment_container, fragmentNormal).commit(); 
       break; 
     } 
    } 
0

如果您使用的是.addToBackStack("")比删除此。并为每个用户调用片段.replace();方法为你的所有片段。

+0

我有3个片段作为我说。两个选项卡(没有'.addToBackStack(“”)',1-support,2-normal)和另外一个从选项卡1调用的片段(这就是为什么它具有'.addToBackStack(“”)'') 。 – Erqox