Как заставить страницу с вкладками перемещаться при нажатии на одну и ту же вкладку текст / значок дважды? - PullRequest
0 голосов
/ 08 ноября 2019

Итак, у меня есть страница с вкладками, и с ней связано несколько вкладок enter image description here

на первой вкладке у меня есть список, в котором, если я щелкаю плитку,скажем, tile1, затем я открываю другую страницу, сохраняя вкладки нетронутыми, но я хочу, чтобы, когда я снова щелкаю вкладку option1, она должна перейти к основному списку, чего не происходит. Любое понимание было бы действительно полезным. "tile1", я делаю

await Navigation.PushAsync(new SubCategoryView());

, что, как я полагаю, является правильным способом, и, как ни странно, предполагаемое поведение работает в iOS, но не на Android

1 Ответ

0 голосов
/ 08 ноября 2019

Если вы хотите вернуться на корневую страницу при выборе той же вкладки, вы можете использовать Пользовательский рендерер

в Android


using Android.Content;

using Android.Support.Design.Widget;
using xxx;
using xxx.Droid;

using Xamarin.Forms;
using Xamarin.Forms.Platform.Android;
using Xamarin.Forms.Platform.Android.AppCompat;

[assembly: ExportRenderer(typeof(TabbedPage), typeof(MyTabbedRenderer))]
namespace xxx.Droid
{
    public class MyTabbedRenderer : TabbedPageRenderer, TabLayout.IOnTabSelectedListener
    {

        public MyTabbedRenderer(Context context) : base(context)
        {

        }

        private TabbedPage tabbed;
        protected override void OnElementChanged(ElementChangedEventArgs<TabbedPage> e)
        {
            base.OnElementChanged(e);

            if (e.NewElement != null)
            {
                tabbed = (TabbedPage)e.NewElement;
            }
            else
            {
                tabbed = (TabbedPage)e.OldElement;
            }

        }
        async void TabLayout.IOnTabSelectedListener.OnTabReselected(TabLayout.Tab tab)
        {
            await tabbed.CurrentPage.Navigation.PopToRootAsync();
        }

    }


}

в iOS

using UIKit;
using System;
using Xamarin.Forms;
using Xamarin.Forms.Platform.iOS;
using xxx;
using xxx.iOS;

[assembly: ExportRenderer(typeof(TabbedPage), typeof(MyTabbedRenderer))]
namespace xxx.iOS
{
    public class MyTabbedRenderer : TabbedRenderer
    {
        private TabbedPage tabbed;
        protected override void OnElementChanged(VisualElementChangedEventArgs e)
        {
            base.OnElementChanged(e);

            if (e.NewElement != null)
            {
                tabbed = (TabbedPage)e.NewElement;
            }
            else
            {
                tabbed = (TabbedPage)e.OldElement;
            }

            try
            {
                var tabbarController = (UITabBarController)this.ViewController;
                if (null != tabbarController)
                {
                    tabbarController.ViewControllerSelected += OnTabbarControllerItemSelected;
                }
            }
            catch (Exception exception)
            {
                Console.WriteLine(exception);
            }
        }

        private async void OnTabbarControllerItemSelected(object sender, UITabBarSelectionEventArgs eventArgs)
        {
            if (tabbed?.CurrentPage?.Navigation != null && tabbed.CurrentPage.Navigation.NavigationStack.Count > 0)
            {
                await tabbed.CurrentPage.Navigation.PopToRootAsync();
            }

        }
    }
}
...