2016-07-20 132 views
2

好吧,所以我正在构建一个Android应用程序,使用this library作为底部导航,我使用基本Activity来保存它以及Framelayout来管理我的片段以加载/替换等禁用Android的片段重新加载BottomBar和片段容器

什么作品: 点击一个底部栏图标加载它对应的片段,并完美的作品。

我的问题: 如果我点击第一个选项卡并且然后第二选项卡并且然后第一标签AGAIN,从头整个片段重新加载上。

我不想要这种行为。任何人都有关于如何保留片段状态的好建议,同时使用底部栏库也是如此。

我在前一个应用程序中实现了与pagerview类似的功能(以前的应用程序没有使用底部栏进行导航),但我不确定如何使用分页视图和基本活动来保存Framelayout用于替代碎片或者甚至是最好的解决方案。

我喜欢我迄今为止所使用的解决方案,只是每次他们替换之前的片段都会从头开始重新加载。如果任何人有任何帮助或建议,可以帮助我,这将不胜感激。

回答

2

好吧,我似乎暂时找出了一个工作。它切换标签后保持片段状态,所以我很满意。

在承载片段容器的基本活动类,我有以下

public class BaseActivity extends AppCompatActivity 
{ 
    AFragment AFragment = new AFragment(); 
    BFragment BFragment = new BFragment(); 

    Fragment currentFragment; 

    Boolean aIsActive = false; 
    Boolean bIsActive = false; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) 
    { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_base); 

     BottomBar bottomBar = BottomBar.attach(this, savedInstanceState); 

     bottomBar.setItems(
       new BottomBarTab(null,"A"), 
       new BottomBarTab(null,"B") 
     ); 

     bottomBar.setDefaultTabPosition(0); 

     bottomBar.setOnTabClickListener(new OnTabClickListener() 
     { 
      @Override 
      public void onTabSelected(int position) 
      { 
       if (position == 0) 
       { 
        if(!aIsActive) 
        { 
         getSupportFragmentManager().beginTransaction().add(R.id.fragmentContainer,AFragment).commit(); 
         aIsActive = true; 
        } 
        else 
        { 
         getSupportFragmentManager().beginTransaction().hide(currentFragment).show(AFragment).commit(); 
        } 

        currentFragment = AFragment; 
       } 
       else if(position == 1) 
       { 
        if(!bIsActive) 
        { 
         getSupportFragmentManager().beginTransaction().add(R.id.fragmentContainer,BFragment).commit(); 
         bIsActive = true; 
        } 
        else 
        { 
         getSupportFragmentManager().beginTransaction().hide(currentFragment).show(BFragment).commit(); 
        } 

        currentFragment = BFragment; 
       } 
      } 

      @Override 
      public void onTabReSelected(int position) { 

      } 
     }); 

    } 

} 

而且LOE你看它按预期工作,而无需刷新片段:) 任何建议或意见,请让我知道和感觉免费评论。

+0

这里的一个改进可能不是维护isActive标志更好地保留片段的变量,并根据null检查该变量。如果这意味着你必须创建片段,否则交换片段 – Ali