2016-07-20 129 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