首页 > 解决方案 > 在 android 上的 tabclick FreshTabbedNavigationContainer 上弹出到根目录

问题描述

考虑一个带有“主页”和“个人资料”按钮的标签栏,当我单击任一页面时,我在两个页面之间切换,在“主页”页面上,用户可以在导航堆栈中向上导航多次,但仍将焦点放在“主页”选项卡上表明这是用户来自的地方。

现在,在 iOS 上,每当用户从导航堆栈的高处单击“主页”时,用户就会弹出到 root 并且一切都很好,但在 android 上并非如此,在 android 上,用户必须一次弹出一页通过单击后退按钮进入根目录。

这是预期的行为吗,我做错了什么,有人知道我可以做些什么来获得所需的行为吗?

标签: androidxamarin.formsfreshmvvm

解决方案


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

如果你需要让 Android 和 iOS 有同样的效果,你需要自定义TabbedPageRenderer来实现。并且底部标签栏效果可以自定义一个FreshTabbedNavigationContainer。最后,我们将使用MessagingCenter将消息发送到 Forms 以弹​​出到 Root Page。

例如,CustomFreshTabbedNavigationContainer类:

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

App.xaml.cs中使用:

public App()
{
    InitializeComponent();

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

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

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;
    }
}

效果:

在此处输入图像描述

注意:如果需要和Android中的顶部Tabbar一样的效果,在CustomTabbedPageRenderer. 你可以看看这个讨论


推荐阅读