我正在创建一个包含首页,颜色,配置文件三个部分的应用程序,我正在使用底部导航视图及其片段来实现此目的。
App UI 这是我的代码: 创建方法的主要活动:
final HomeFragment homeFragment = new HomeFragment();
final ColorFragment colorFragment = new ColorFragment();
final ProfileFragment profileFragment = new ProfileFragment();
bottomNavigationView.setOnNavigationItemSelectedListener(new BottomNavigationView.OnNavigationItemSelectedListener() {
@Override
public boolean onNavigationItemSelected(@NonNull MenuItem item) {
Fragment active = homeFragment;
switch (item.getItemId()){
case R.id.action_home:
active = homeFragment;
break;
//return true;
case R.id.action_color:
active = colorFragment;
break;
case R.id.action_profile:
active = profileFragment;
break;
default:
active = homeFragment;
break;
}
//Loading the fragment on click
fragmentManager.beginTransaction().replace(R.id.fragment_container,active).commit();
return true;
}
});
我正在使用片段管理器将片段加载到我的主要活动中,这具有以下问题。
1。每次单击底部导航图标时,它都会重新加载片段。(我从firebase中获取数据会很昂贵)
我已经阅读了很多与此相关的文章,发现了如下解决方案:
fragmentManager.beginTransaction().add(R.id.fragment_container, profileFragment, "3").hide(profileFragment).commit();
fragmentManager.beginTransaction().add(R.id.fragment_container, colorFragment, "2").hide(colorFragment).commit();
fragmentManager.beginTransaction().add(R.id.fragment_container,homeFragment, "1").commit();
上述解决方案会在创建活动时加载所有片段,而这并不是有效的方案
这对我也不起作用。
请帮助:
我要实现的目标: 1.片段应该仅在我第一次单击图标时加载。 2.创建活动时不应加载所有片段。 3.当我修改片段时,不应再次加载它,我应该保持在先前的状态ex。滚动到第25张卡
//它应该像playstore,youtube一样,当我们单击图标时它将加载数据,当我们重新访问状态即会出现。
答案 0 :(得分:1)
您要么需要使用Google为BottomNavigationView
提供的扩展功能,要么使用ViewPager
/ ViewPager2
来使每个片段都有其自己的堆栈,然后返回完全相同的片段一遍又一遍地创建根片段的过程。两种解决方案都要求您将NavHostFragment
作为每个选项卡的根。您可以检出示例in this repo。
答案 1 :(得分:0)