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
});
}
我正在使用 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
});
}