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
一般思路,你有RecentFragment
、FavoriteFragment
和NearByFragment
三个根片段,
单击相关选项卡时,可以使用 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();
终于可以尝试封装控制器了
我目前正在处理 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
一般思路,你有RecentFragment
、FavoriteFragment
和NearByFragment
三个根片段,
单击相关选项卡时,可以使用 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();
终于可以尝试封装控制器了