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

时间:2019-02-28 08:55:49

标签: c# android xamarin mvvmcross

我目前正在研究MVVMCross Xamarin Android项目。到目前为止,我已经实现了普通导航和底部栏导航。我想在每个底部栏标签中打开动态片段。例如,我有底部的菜单栏,最近,收藏和近距离。单击每个选项卡,它会创建片段。在每个片段内,我想提供单击时动态创建片段的功能。

我想在这里实现的是,它应该保持导航选项卡明智。假设我分别为“最近”,“收藏夹”和“附近”创建了5、3、4个片段,当前我位于“收藏夹”选项卡上,然后单击“上一步”应首先导航回所有3个选项卡。同样,它应该遵循其他选项卡的导航。

此github链接中的可用功能完全相同 [https://github.com/ncapdevi/FragNav][1]。这是一个适用于Android的应用程序,但我需要建议如何使用Xamarin,MVVMCross和C#实现相同的功能。

任何帮助,我们将不胜感激。

1 个答案:

答案 0 :(得分:1)

首先,您的链接已失效,然后,我认为您需要了解片段的后叠并显示隐藏的功能以实现此目的。FragmentTransaction

一般思路,您有RecentFragmentFavoriteFragmentNearByFragment三个根片段, 当您点击相对标签时,可以使用 show hide 片段的方法 这个:

 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();

最后,您可以尝试封装控制器

相关问题