Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/193.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 表单将子页面添加到TabbedPage_Android_Xamarin.forms_Tabbedpage - Fatal编程技术网

Android 表单将子页面添加到TabbedPage

Android 表单将子页面添加到TabbedPage,android,xamarin.forms,tabbedpage,Android,Xamarin.forms,Tabbedpage,我的应用程序中的主页是一个选项卡页 我有三个标签: 付款、配置、维护 其中一个选项卡由显示或不显示的设置控制。当更改为false时,我通过执行以下操作删除选项卡: tabPage.Children.Remove(ConfigTab); 这种移除效果很好。如果我重新打开选项卡,我可以使用以下代码添加选项卡: tabPage.Children.Add(ConfigTab); 但其已添加到列表末尾,并且缺少导航标题: 我研究了如何使用Insert方法来指定索引 tabPage.Children.

我的应用程序中的主页是一个选项卡页

我有三个标签:

付款、配置、维护

其中一个选项卡由显示或不显示的设置控制。当更改为false时,我通过执行以下操作删除选项卡:

tabPage.Children.Remove(ConfigTab);
这种移除效果很好。如果我重新打开选项卡,我可以使用以下代码添加选项卡:

tabPage.Children.Add(ConfigTab);
但其已添加到列表末尾,并且缺少导航标题:

我研究了如何使用Insert方法来指定索引

tabPage.Children.Insert(1,ConfigTab);
但这导致应用程序崩溃,并显示以下消息:

未处理的异常:Java.Lang.IndexOutOfBoundsException:无效 索引2,大小为2

如果我在那一点检查孩子们,它已经在正确的索引处添加了页面

关于如何将新页面动态插入选项卡页面,有什么建议吗?并保留导航

更新:

现在,我已通过执行以下操作使其正常工作:

var paymentPage = tabPage.Children.FirstOrDefault(p=> p.ClassId == "PaymentNavPage");
var configPage = GetConfigPage();
var maintenancePage = tabPage.Children.FirstOrDefault(p => p.ClassId == "MaintaintNavPage");

// Clear old Tabgs
tabPage.Children.Clear();

// Put pages back
tabPage.Children.Add(paymentPage);
tabPage.Children.Add(configPage);
tabPage.Children.Add(maintenancePage);              

我仍然对是否有更好的方法使用Insert方法,然后重置导航堆栈感兴趣。

我对Insert给孩子们带来了同样的体验。您的解决方案似乎是隐藏和显示页面的唯一选项。我建议将页面分配给变量,这样您就不必在每次隐藏/显示ConfigPage时都遍历子对象。基于这些名称,我假设这些页面彼此不同

在类似页面的情况下,可以在DataTemplate的帮助下使用ItemsSource。将ItemsSource绑定到ObservableCollection时,隐藏和显示页面只需要修改该集合。有关这方面的更多信息,请访问:


我对孩子们的插入也有同样的感受。您的解决方案似乎是隐藏和显示页面的唯一选项。我建议将页面分配给变量,这样您就不必在每次隐藏/显示ConfigPage时都遍历子对象。基于这些名称,我假设这些页面彼此不同

在类似页面的情况下,可以在DataTemplate的帮助下使用ItemsSource。将ItemsSource绑定到ObservableCollection时,隐藏和显示页面只需要修改该集合。有关这方面的更多信息,请访问:


下一个代码对我有用:

tabPage.Children.Insert(1,ConfigTab);

下一个代码对我有用:

tabPage.Children.Insert(1,ConfigTab);

谢谢我猜之前Xamarin表单中有一个bug导致插入函数崩溃,但是已经修复了。谢谢。我猜Xamarin表单中以前有一个bug,导致插入函数崩溃,但已经修复。