使用 BottomBar 和片段容器禁用 Android 片段重新加载
Disable Android Fragment reloading with BottomBar and fragment container
好的,所以我正在构建一个 android 应用程序,它使用 this library 作为底部导航,我正在使用一个基础 Activity 来保存它以及一个 Framelayout 来管理我的片段 loading/replacing 等等
什么有效:
点击底部栏图标加载它对应的片段并且完美运行。
我的问题:
如果我点击第一个选项卡,然后点击第二个选项卡,然后点击第一个选项卡 AGAIN,整个片段将从头开始重新加载。
我不想要这种行为。任何人都有关于如何在 ALSO 使用底部栏库时保留片段状态的任何好技巧。
我在以前的应用程序中使用寻呼机视图实现了类似的东西(以前的应用程序没有使用底部栏进行导航)但我不确定如何使用寻呼机视图 ONE base activity 包含用于替换片段的框架布局,或者如果那是最好的解决方案。
我喜欢目前为止的解决方案,除了片段每次替换前一个片段时都会从头重新加载。如果有人有任何帮助或建议可以帮助我,将不胜感激。
好吧,我似乎暂时找到了解决方法。它在切换标签后保持片段状态,所以我很满意。
在托管片段容器的基础 activity class 中,我有以下内容
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) {
}
});
}
}
你看,它在没有刷新片段的情况下按预期工作:)
任何建议或反馈请让我知道并随时发表评论。
好的,所以我正在构建一个 android 应用程序,它使用 this library 作为底部导航,我正在使用一个基础 Activity 来保存它以及一个 Framelayout 来管理我的片段 loading/replacing 等等
什么有效: 点击底部栏图标加载它对应的片段并且完美运行。
我的问题: 如果我点击第一个选项卡,然后点击第二个选项卡,然后点击第一个选项卡 AGAIN,整个片段将从头开始重新加载。
我不想要这种行为。任何人都有关于如何在 ALSO 使用底部栏库时保留片段状态的任何好技巧。
我在以前的应用程序中使用寻呼机视图实现了类似的东西(以前的应用程序没有使用底部栏进行导航)但我不确定如何使用寻呼机视图 ONE base activity 包含用于替换片段的框架布局,或者如果那是最好的解决方案。
我喜欢目前为止的解决方案,除了片段每次替换前一个片段时都会从头重新加载。如果有人有任何帮助或建议可以帮助我,将不胜感激。
好吧,我似乎暂时找到了解决方法。它在切换标签后保持片段状态,所以我很满意。
在托管片段容器的基础 activity class 中,我有以下内容
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) {
}
});
}
}
你看,它在没有刷新片段的情况下按预期工作:) 任何建议或反馈请让我知道并随时发表评论。