android - 点击当前选项卡刷新页面时的 Xamarin.Forms TabbedPage 事件

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

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

如果用户已经在选项卡 2 上,并且单击了选项卡 2,我希望刷新选项卡 2,或者运行我自己的功能以便我自己刷新它。

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

最佳答案

这是我最终解决问题的方式。我的 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();
            }

        }
    }
}

关于android - 点击当前选项卡刷新页面时的 Xamarin.Forms TabbedPage 事件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42801222/

相关文章:

Android SQL 数据库找不到正确的行

c# - 如何在 .NET Standard 2.0 项目上实现 Dotfuscator?

ipad - IOS:UIDatePicker 呈现黑色背景效果不佳

c# - 您可以并排放置两个编辑字段吗?

android - 使用用户移动在 map Api V2 上绘图

android - 如何更改 tabhost 中的选项卡焦点?

android - 使用带有 Tab 的 Activitygroup 未显示第二个 Activity

java - 为什么我的 Android 应用程序会定期崩溃?

ios - 取消 UISwitch 的自动触发值改变事件

ios - 如何获得 UICollectionView 的虚线页面指示器?