【发布时间】:2017-11-06 15:18:38
【问题描述】:
在我的 StartActivity 中,BottomNavigationBar 侦听器具有以下设置:
private GuideFragment guideFragment = new GuideFragment();
private MapFragment mapFragment = new MapFragment();
private MoreFragment moreFragment = new MoreFragment();
private BottomNavigationView.OnNavigationItemSelectedListener mOnNavigationItemSelectedListener
= new BottomNavigationView.OnNavigationItemSelectedListener() {
@Override
public boolean onNavigationItemSelected(@NonNull MenuItem item) {
Fragment selectedFragment = null;
switch (item.getItemId()) {
case R.id.navigation_guide:
selectedFragment = guideFragment;
break;
case R.id.navigation_map:
selectedFragment = mapFragment;
break;
case R.id.navigation_more:
selectedFragment = moreFragment;
break;
}
FragmentTransaction transaction = getFragmentManager().beginTransaction();
transaction.replace(R.id.content, selectedFragment);
transaction.commit();
return true;
}
};
正如我上面提到的,我想防止所选片段总是重新加载源/视图。 我在片段中尝试了一些类似 - 的东西:
if (rootView == null)
inflater.inflate...
但片段仍然重新创建视图并加载(在我的情况下)新的 webresources。
我读到了一些 PageView 可以提供帮助的东西,尤其是
offScreenPageLimit
应该施展魔法。
我的主要问题是我应该在哪里实现 PageViewer - 是否可以在我的 StartActivity 中实现? 或者我可以通过其他方式解决问题吗?
【问题讨论】:
-
您的片段内容是直接相关还是相切相关?也就是说,每个片段的内容是否可以在没有其他片段的情况下存在并且有意义?如果没有,那么使用
ViewPager切换选项卡式导航可能更符合您的要求。 -
所有三个片段都在不同的视图/选项卡中。 View Pager 是一个自己的类还是我可以将它添加到我的活动中?
-
或者我理解正确 - 我是否必须删除 BottomNavigation 并用 ViewPager 替换它?
-
是的 - 考虑您正在展示的内容的类型,然后选择最适合展示该内容的小部件。查看material.io/guidelines/components/bottom-navigation.html,然后查看 ViewPager 文档。
ViewPager可能会更好地满足您的要求。 -
好的,谢谢 CzarMatt。但我不敢相信 Android/Google 团队提供了一个不处理片段生命周期的 BottomNavigationBar。当然这有点新东西 - 但总是称标签的新实例是......
标签: android android-fragments bottomnavigationview fragment-oncreateview