Xamarin 表单:打开选项卡时调用相邻选项卡

Xamarin forms: Adjacent tab get called when open a tab

我正在使用 TabbedPage 在我的应用程序中实现选项卡。我有 4 个选项卡,并且总是先打开第二个选项卡,因为第一个选项卡是主页选项卡。选择第二个选项卡时,第三个选项卡也在后台加载,选择第三个选项卡时,第四个选项卡也在后台加载。

TabbedPage 代码:

var homePage = new Pages.HomePage()
    {
        Title = "Home"
    };

    var secondPage= new SecondPage()
    {
        Title = "SecondPage"
    };

    var thirdPage = new ThirdPage()
    {
        Title = "ThirdPage"
    };

    var fourthPage = new FourthPage()
    {
        Title = "FourthPage"
    };

    Children.Add(homePage);
    Children.Add(secondPage);
    Children.Add(thirdPage);
    Children.Add(fourthPage);
    CurrentPage = Children[1];

  this.CurrentPageChanged += (object sender, EventArgs e) =>
        {
            var i = this.Children.IndexOf(this.CurrentPage);
            if (i == 0)
            {
                CallHomePage();
            }
            else if (i == 1)
            {
                //SecondPage icon settings
            }
            else if (i == 2)
            {
                //ThirdPage icon settings
            }
            else if (i == 3)
            {
               //FourthPage icon settings
            }
        };

如何在选择标签时停止加载相邻标签?

好吧,与 C# 中的所有 arrays/lists 一样,Children 列表是 零索引 ,这意味着第一个元素位于 Children[0].

解决方法: 你可以在OnCurrentPageChanged 方法中获取currentPage 的索引如果索引等于1(第二页),使用消息中心发送消息到page.Refer 以下代码 .

in Tabbed Page

protected override void OnCurrentPageChanged()
{
 base.OnCurrentPageChanged();

 int index = Children.IndexOf(CurrentPage);

 if (index == 1)
 {
    MessagingCenter.Send<Object>(this, "click_second_tab");
 }

 else if (index == 2)
 {
  MessagingCenter.Send<Object>(this, "click_third_tab");
 }

 else if (index == 3)
 {
  //...
 }
} 

in the second page .Move the code that load data from onAppearing to the constructor

public SecondPage()
{

  //...
  MessagingCenter.Subscribe<Object>(this, "click_second_tab", (obj) =>
  {
     //load your data here

  });

}