【问题标题】:Xamarin forms: Adjacent tab get called when open a tabXamarin 表单:打开选项卡时调用相邻选项卡
【发布时间】:2019-02-15 07:00:16
【问题描述】:

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

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

【问题讨论】:

  • 这里有一个类似的案例,可以参考。stackoverflow.com/questions/53968876/…
  • @LucasZhang-MSFT 我会通过这个并更新你。
  • @LucasZhang-MSFT 请发布它,它有效...
  • 快乐编码:)

标签: xamarin.forms tabs tabbedpage


【解决方案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

  });

} 

【讨论】:

    【解决方案2】:

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

    【讨论】:

    • 我在 3 个选项卡中加载 3 个不同的列表(第一个选项卡是主页选项卡)。选择第二个选项卡时,第三选项卡在UI中显示用户对话,在选择第三个选项卡时相同,显示UI中的第四个选项卡用户对话。这是一个已知问题吗?
    • 用完整的标签页代码编辑了问题,你能检查一下吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-11-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多