点击当前标签以刷新页面时的Xamarin.Forms TabbedPage事件

时间:2017-03-15 04:41:42

标签: android xamarin xamarin.ios xamarin.android xamarin.forms

我使用Xamarin.Forms构建iOS / Android应用程序,并有一个TabbedPage。

如果用户已经在Tab 2上,并且点击了Tab2,我想要tab2刷新,或者我想要运行我自己的功能,所以我可以自己刷新它。

有没有办法在Xamarin.Forms中执行此操作或使用自定义渲染器执行此操作?

3 个答案:

答案 0 :(得分:4)

以下是我最终解决问题的方法。我的TabbedPage包含每个选项卡的NavigationPage,因此如果您不使用导航页面,您的代码将不得不稍微改变一点点。您可以将“刷新”逻辑放在iOS的OnTabbarControllerItemSelected和Android的OnTabbarControllerItemSelected内。看看下面的代码。

Android渲染器(由Mike Ma提供)

using Android.Support.Design.Widget;
using Xamarin.Forms;
using Xamarin.Forms.Platform.Android;
using Xamarin.Forms.Platform.Android.AppCompat;
[assembly: ExportRenderer(typeof(MainTabbedPage), typeof(MainPageRenderer))]
namespace YourNameSpace
{
    public class MainPageRenderer : TabbedPageRenderer, TabLayout.IOnTabSelectedListener
    {
        private MainTabbedPage _page;
        protected override void OnElementChanged(ElementChangedEventArgs<TabbedPage> e)
        {
            base.OnElementChanged(e);
            if (e.NewElement != null)
            {
                _page = (MainTabbedPage)e.NewElement;
            }
            else
            {
                _page = (MainTabbedPage)e.OldElement;
            }

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

iOs渲染器:

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

[assembly: ExportRenderer(typeof(MainTabbedPage), typeof(MainPageRenderer))]
namespace YourNameSpace
{
    public class MainPageRenderer : TabbedRenderer
    {
        private MainTabbedPage _page;
        protected override void OnElementChanged(VisualElementChangedEventArgs e)
        {
            base.OnElementChanged(e);

            if (e.NewElement != null)
            {
                _page = (MainTabbedPage)e.NewElement;
            }
            else
            {
                _page = (MainTabbedPage)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 (_page?.CurrentPage?.Navigation != null && _page.CurrentPage.Navigation.NavigationStack.Count > 0)
            {
                await _page.CurrentPage.Navigation.PopToRootAsync();
            }

        }
    }
}

答案 1 :(得分:2)

对Android Native $1进行一些研究点击事件回调函数为TabLayout

根据TabbedPageRenderer源代码。您可以找到OnTabReselected未实施。

所以我按照以下代码为OnTabReselected创建了一个客户呈现,并实现TabbedPage函数来更改当前页面背景:

OnTabReselected

enter image description here

答案 2 :(得分:0)

您可以将每个标签放在不同的页面中,然后当任何页面被选项卡时,调用Override on Appearing()方法,您可以从那里更新值。