MVVMCross-Android 片段内的动态片段并管理每个片段的导航堆栈

MVVMCross-Android dynamic fragment inside fragment and manage navigation stack per fragment

我目前正在处理 MVVMCross Xamarin Android 项目。至此我已经实现了正常导航和底栏导航。我想在每个底部栏选项卡内打开动态片段。例如,我有底部栏菜单 Recent、Favorite 和 NearBy。单击每个选项卡,它会创建片段。在每个片段中,我想提供在点击时动态创建片段的工具。

我想在这里实现的是,它应该明智地保留导航选项卡的堆栈。假设我分别为 Recent、Favorite 和 Nearby 创建了 5、3、4 个片段,目前我在最喜欢的选项卡上,点击返回应该首先导航回所有 3 个选项卡。同样,它应该遵循其他选项卡的导航。

此 github link 中提供的特性和功能完全相同 [https://github.com/ncapdevi/FragNav][1]。这是针对 Android 的,但我需要建议如何使用 Xamarin、MVVMCross 和 C# 实现相同的功能。

非常感谢任何帮助。

首先你的 link 已经死了,然后我认为你需要了解片段的后台堆栈并显示隐藏的功能来实现它。FragmentTransaction

一般思路,你有RecentFragmentFavoriteFragmentNearByFragment三个根片段, 单击相关选项卡时,可以使用 showhide 片段方法 这 :

 FragmentTransaction fTransaction = FragmentManager.BeginTransaction();
            hideAllFragment(fTransaction);
            //judge which tab is clicked
            switch (tab.Id)
            {
                case Recent:                
                    if (recentFragment== null)
                    {
                        recentFragment= new RecentFragment ();
                        fTransaction.Add(Resource.Id.ly_content, recentFragment);
                    }
                    else{fTransaction.Show(recentFragment);}break;
                case Favorite:
                    if (favoriteFragment== null)
                    {
                        favoriteFragment= new FavoriteFragment();
                        fTransaction.Add(Resource.Id.ly_content, favoriteFragment);
                    }
                    else{fTransaction.Show(favoriteFragment);}
                    break;
                case NearBy:
                    if (nearByFragment== null)
                    {
                        nearByFragment= new NearByFragment();
                        fTransaction.Add(Resource.Id.ly_content, nearByFragment);
                    }else{fTransaction.Show(nearByFragment);}break;
            }
            fTransaction.Commit();

然后在每个根片段中实现返回堆栈使用addToBackStack :

FragmentManager fragmentManager = FragmentManager;
        FragmentTransaction fragmentTransaction = fragmentManager.BeginTransaction();
        fragmentTransaction.Replace(containerViewId,fragment);
        fragmentTransaction.AddToBackStack(null);
        fragmentTransaction.Commit();

终于可以尝试封装控制器了