在Tabclick上弹出根目录,在Android上为FreshTabbedNavigationContainer

问题描述

考虑一个带有“主页”和“配置文件”按钮的标签栏,当我单击任一按钮时,我会在两个页面之间切换,在“主页”页面上,用户可以在导航堆栈中多次向上导航,但仍将重点放在“主页”标签,表明这是用户的来源。

现在,在iOS上,每当用户从导航堆栈中的高处单击“主页”时,该用户就会被弹出到root用户,一切都很好,但是在android上不是这种情况,但是在android上,用户必须弹出一页一次,只需单击后退按钮即可进入根目录。

这是预期的行为吗,我在实现过程中做错了什么?[0],是否有人对我可以做些什么来获得所需的行为有任何线索?

[0] https://git.sr.ht/~ivar/FreshTabbedPageAndroidInconvenience/tree

解决方法

这是iOS和Android之间的预期行为。

如果需要使Android与iOS具有相同的效果,则需要自定义 TabbedPageRenderer 来实现。底部的标签栏效果可以自定义 FreshTabbedNavigationContainer 。最后,我们将使用 MessagingCenter 将邮件发送到表单以弹出到根页面。

例如, CustomFreshTabbedNavigationContainer 类:

false"

App.xaml.cs 中使用:

public class CustomFreshTabbedNavigationContainer : FreshTabbedNavigationContainer
{
    public CustomFreshTabbedNavigationContainer()
    {
        On<Android>().SetToolbarPlacement(ToolbarPlacement.Bottom);
        MessagingCenter.Subscribe<object>(this,"Hi",(sender) =>
        {
            // Do something whenever the "Hi" message is received
            PopToRoot(true);
        });
    }
}

现在,我们将在Android中创建一个 CustomTabbedPageRenderer

public App()
{
    InitializeComponent();

    var container = new CustomFreshTabbedNavigationContainer();
    container.AddTab<FirstPageModel>("Home",default);
    container.AddTab<ProfilePageModel>("Profile",default);
    MainPage = container;
}

效果:

enter image description here

注意:如果需要与Android顶部的Tabbar具有相同的效果,则public class CustomTabbedPageRenderer : TabbedPageRenderer,BottomNavigationView.IOnNavigationItemSelectedListener { public CustomTabbedPageRenderer(Context context) : base(context) { } int previousItemId = 0; bool BottomNavigationView.IOnNavigationItemSelectedListener.OnNavigationItemSelected(IMenuItem item) { base.OnNavigationItemSelected(item); if (item.IsChecked) { if (previousItemId != item.ItemId) { previousItemId = item.ItemId; } else { Console.WriteLine("ok"); MessagingCenter.Send<object>(this,"Hi"); } } return true; } } 中会有不同的代码。您可以看看这个discussion