Xamarin формы: соседняя вкладка вызывается при открытии вкладки
Я использую 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
}
};
Как я могу остановить загрузку соседней вкладки при выборе вкладки?
2 ответа
Решение. Вы можете получить индекс currentPage в методе OnCurrentPageChanged. И если индекс равен 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
});
}
Ну, как со всеми массивами / списками в C#, Children
список с нулевым индексом, что означает, что первый элемент находится в Children[0]
,