在android上单击FreshTabbedNavigationContainer,弹出到根目录

在android上单击FreshTabbedNavigationContainer,弹出到根目录,android,xamarin.forms,freshmvvm,Android,Xamarin.forms,Freshmvvm,考虑一个带有“主页”和“配置文件”按钮的选项卡栏,当我单击其中一个,在两个页面之间切换时,在“主页”页面上,用户可以在navigationstack中导航多次,但焦点仍然集中在“主页”选项卡上,指示用户来自何处 现在,在iOS上,每当用户在导航策略中从高处单击“home”时,用户就会弹出到根目录,一切正常,但在android上并非如此。然而,在android上,用户必须通过单击backbutton一次弹出一个页面才能到达根目录 这是预期的行为吗?我在实现[0]时是否做错了什么?是否有人知道我可以

考虑一个带有“主页”和“配置文件”按钮的选项卡栏,当我单击其中一个,在两个页面之间切换时,在“主页”页面上,用户可以在navigationstack中导航多次,但焦点仍然集中在“主页”选项卡上,指示用户来自何处

现在,在iOS上,每当用户在导航策略中从高处单击“home”时,用户就会弹出到根目录,一切正常,但在android上并非如此。然而,在android上,用户必须通过单击backbutton一次弹出一个页面才能到达根目录

这是预期的行为吗?我在实现[0]时是否做错了什么?是否有人知道我可以做些什么来获得预期的行为


[0]

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

如果您需要使Android具有与iOS相同的效果,您需要定制来实现这一点。底部选项卡栏效果可以自定义FreshTabbedNavigationContainer。最后,我们将使用将消息发送到表单,以弹出到根页面

例如,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);
        });
    }
}
公共类CustomFreshTabbedNavigationContainer:FreshTabbedNavigationContainer
{
公共CustomFreshTabbedNavigationContainer()
{
在


注意:如果需要与Android中的顶部选项卡栏具有相同的效果,则在
CustomTabbedPageRenderer
中有不同的代码。您可以查看此代码。

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

如果您需要使Android具有与iOS相同的效果,则需要自定义以实现该效果。底部的选项卡栏效果可以自定义FreshTabbedNavigationContainer。最后,我们将使用将消息发送到表单,以弹出到根页面

例如,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);
        });
    }
}
公共类CustomFreshTabbedNavigationContainer:FreshTabbedNavigationContainer
{
公共CustomFreshTabbedNavigationContainer()
{
在

注意:如果需要与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;
    }
}