Xamarin形式:打开选项卡时调用相邻选项卡

时间:2019-02-15 07:00:17

标签: xamarin.forms tabs tabbedpage

我正在使用TabbedPage在我的应用中实施标签页。我有4个标签,并且始终总是首先打开第二个标签,因为第一个标签是主页标签。选择第二个标签时,第三个标签也会在后台加载;选择第三个标签时,第四个标签也会在后台加载。

标签页代码:

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
            }
        };

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

2 个答案:

答案 0 :(得分:1)

解决方案:您可以在OnCurrentPageChanged方法中获取currentPage的索引,如果索引等于1(第二页),请使用消息中心将消息发送到该页面。请参考以下代码。 >

  

在标签页中

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)
 {
  //...
 }
} 
  

在第二页中。将将数据从onAppearing加载到构造函数中的代码

public SecondPage()
{

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

  });

} 

答案 1 :(得分:0)

与C#中的所有数组/列表一样,Children列表的索引为零索引,这意味着第一个元素位于Children[0]