我正在使用 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/