首页 > 解决方案 > 保持相同导航活动的片段但共享数据

问题描述

我提出这个问题是因为我在 Java 中没有找到任何好的例子。底部导航栏有 5 个片段:首页、收藏夹、上传、收件箱和用户。每次切换片段时,都会再次创建片段,这正是我不想要的。这不仅仅是替换碎片,因为 Home 和 Favorite 是相互依赖的:如果您在市场上将产品标记为收藏,它必须以收藏和相同的方式出现。

这里导航活动

public class NavigationActivity extends AppCompatActivity {
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        if(UnipopApp.LoggedUser.getUserLogged() != null) setContentView(R.layout.main);
        else setContentView(R.layout.main_guest);
        setUpNavigation();
    }

    public void setUpNavigation() {
        BottomNavigationView bottomNavigationView;
        NavHostFragment navHostFragment;
        if(UnipopApp.LoggedUser.getUserLogged() != null) {
            bottomNavigationView = findViewById(R.id.bottom_navigation);
            navHostFragment =
                (NavHostFragment) getSupportFragmentManager().findFragmentById(R.id.nav_host_fragment);
        }
        else {
            bottomNavigationView = findViewById(R.id.bottom_navigation_guest);
            navHostFragment =
                (NavHostFragment) getSupportFragmentManager().findFragmentById(R.id.nav_host_fragment_guest);
        }

        NavigationUI.setupWithNavController(bottomNavigationView,
            navHostFragment.getNavController());
    }
}

如果附有示例,我想要一些可扩展的和更好的东西。谢谢

标签: javaandroidandroid-fragmentsuinavigationcontroller

解决方案


您需要将项目 check=true 或 false 存储在列表中,然后您可以在应用程序的任何位置读取该列表。或者您可以创建一个单独的收藏项目列表并仅显示收藏部分中的项目。如果用户从家中取消选择该项目,那么您可以从最喜欢的项目列表中删除该项目。如果您使用的是 mvvm,那么您可以在所有片段之间共享一个视图模型。


推荐阅读