如何保存片段状态:带有片段android的底部导航视图

时间:2020-08-19 19:00:06

标签: android android-fragments bottomnavigationview

我正在创建一个包含首页,颜色,配置文件三个部分的应用程序,我正在使用底部导航视图及其片段来实现此目的。

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中获取数据会很昂贵)

我已经阅读了很多与此相关的文章,发现了如下解决方案:

  1. 在活动创建时隐藏片段
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. 使用NavHost: 每次都会刷新片段。

这对我也不起作用。

请帮助:

我要实现的目标: 1.片段应该仅在我第一次单击图标时加载。 2.创建活动时不应加载所有片段。 3.当我修改片段时,不应再次加载它,我应该保持在先前的状态ex。滚动到第25张卡

//它应该像playstore,youtube一样,当我们单击图标时它将加载数据,当我们重新访问状态即会出现。

2 个答案:

答案 0 :(得分:1)

您要么需要使用Google为BottomNavigationView提供的扩展功能,要么使用ViewPager / ViewPager2来使每个片段都有其自己的堆栈,然后返回完全相同的片段一遍又一遍地创建根片段的过程。两种解决方案都要求您将NavHostFragment作为每个选项卡的根。您可以检出示例in this repo

答案 1 :(得分:0)

您可以使用FragmentPagerAdapterViewPager2。对于相似的问题,我推荐给您两个答案:

1- FragmentPagerAdapter

2- ViewPager2