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],

Другие вопросы по тегам