使用 BottomBar 和片段容器禁用 Android 片段重新加载
Posted
技术标签:
【中文标题】使用 BottomBar 和片段容器禁用 Android 片段重新加载【英文标题】:Disable Android Fragment reloading with BottomBar and fragment container 【发布时间】:2016-11-24 08:37:43 【问题描述】:好的,所以我正在构建一个使用 this library 进行底部导航的 android 应用程序,并且我正在使用一个基本 Activity 来保存它以及一个 Framelayout 来管理我的片段以进行加载/替换等。
有效的方法: 点击底部栏图标会加载它对应的片段并且效果很好。
我的问题: 如果我点击第一个选项卡,然后是第二个选项卡,然后是第一个选项卡AGAIN,整个片段会从头开始重新加载。
我不想要这种行为。 ALSO 使用底部栏库时,任何人都有关于如何保留片段状态的任何好的提示。
我在以前的应用程序中使用 pagerview 实现了类似的功能(以前的应用程序没有使用底栏进行导航),但我不确定如何将 pagerview 与 ONE 基本活动一起使用它包含用于替换片段的 Framelayout,或者这甚至是最好的解决方案。
我喜欢我目前拥有的解决方案,除了片段每次替换以前的片段时都从头开始重新加载。如果有人有任何可以帮助我的帮助或建议,将不胜感激。
【问题讨论】:
【参考方案1】:好吧,我似乎暂时想出了一个解决办法。它在切换标签后保持片段状态,所以我很满意。
在承载片段容器的基本活动类中,我有以下内容
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)
);
你瞧,它可以按预期工作而无需刷新片段 :) 任何建议或反馈,请让我知道并随时发表评论。
【讨论】:
这里的一个改进可能不是更好地维护 isActive 标志,而是为片段保留一个变量,并检查该变量是否为空。如果是这样,则意味着您必须创建片段,如果不是,则交换片段以上是关于使用 BottomBar 和片段容器禁用 Android 片段重新加载的主要内容,如果未能解决你的问题,请参考以下文章