我使用Xamarin.Forms构建iOS / Android应用程序,并有一个TabbedPage。
如果用户已经在Tab 2上,并且点击了Tab2,我想要tab2刷新,或者我想要运行我自己的功能,所以我可以自己刷新它。
有没有办法在Xamarin.Forms中执行此操作或使用自定义渲染器执行此操作?
答案 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
答案 2 :(得分:0)
您可以将每个标签放在不同的页面中,然后当任何页面被选项卡时,调用Override on Appearing()
方法,您可以从那里更新值。