【问题标题】:How to save fragment state : Bottom Navigation View with fragments android如何保存片段状态:带有片段android的底部导航视图
【发布时间】:2020-08-19 19:00:06
【问题描述】:

我正在创建一个包含三个部分的应用程序主页、颜色、配置文件我正在使用带有片段的底部导航视图来实现这一点。

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. 使用导航主机: 它每次都会刷新片段。

这对我也不起作用。

请帮忙:

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

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

【问题讨论】:

    标签: android android-fragments bottomnavigationview


    【解决方案1】:

    您要么需要使用 Google 为 BottomNavigationView 提供的扩展功能,要么使用 ViewPager/ViewPager2 让每个片段都有自己的返回堆栈并返回到完全相同的片段,而不是创建根片段再次。这两种解决方案都要求您将NavHostFragment 作为每个选项卡的根。您可以查看示例in this repo

    【讨论】:

      【解决方案2】:

      您可以使用FragmentPagerAdapterViewPager2。对于类似的问题,我建议您参考两个答案:

      1- FragmentPagerAdapter

      2- ViewPager2

      【讨论】:

        猜你喜欢
        • 2021-08-05
        • 2021-02-21
        • 1970-01-01
        • 2019-10-05
        • 2018-08-01
        • 2019-12-02
        • 1970-01-01
        • 2017-03-20
        • 1970-01-01
        相关资源
        最近更新 更多