android - 单击两次相同的选项卡文本/图标时如何使选项卡式页面导航?
问题描述
在第一个选项卡上,我有一个列表,如果我单击一个图块,比如说 tile1,然后我打开另一个页面,保持标签不变,但我想要的是当我再次单击选项卡 option1 时,它应该去到主列表,这没有发生任何见解都会非常有帮助点击“tile1”,我愿意
await Navigation.PushAsync(new SubCategoryView());
我认为这是正确的方法,具有讽刺意味的是,预期的行为在 iOS 中有效,但在 Android 上无效
解决方案
如果要在选择同一个选项卡时返回到根页面,可以使用自定义渲染器
在安卓中
using Android.Content;
using Android.Support.Design.Widget;
using xxx;
using xxx.Droid;
using Xamarin.Forms;
using Xamarin.Forms.Platform.Android;
using Xamarin.Forms.Platform.Android.AppCompat;
[assembly: ExportRenderer(typeof(TabbedPage), typeof(MyTabbedRenderer))]
namespace xxx.Droid
{
public class MyTabbedRenderer : TabbedPageRenderer, TabLayout.IOnTabSelectedListener
{
public MyTabbedRenderer(Context context) : base(context)
{
}
private TabbedPage tabbed;
protected override void OnElementChanged(ElementChangedEventArgs<TabbedPage> e)
{
base.OnElementChanged(e);
if (e.NewElement != null)
{
tabbed = (TabbedPage)e.NewElement;
}
else
{
tabbed = (TabbedPage)e.OldElement;
}
}
async void TabLayout.IOnTabSelectedListener.OnTabReselected(TabLayout.Tab tab)
{
await tabbed.CurrentPage.Navigation.PopToRootAsync();
}
}
}
在 iOS 中
using UIKit;
using System;
using Xamarin.Forms;
using Xamarin.Forms.Platform.iOS;
using xxx;
using xxx.iOS;
[assembly: ExportRenderer(typeof(TabbedPage), typeof(MyTabbedRenderer))]
namespace xxx.iOS
{
public class MyTabbedRenderer : TabbedRenderer
{
private TabbedPage tabbed;
protected override void OnElementChanged(VisualElementChangedEventArgs e)
{
base.OnElementChanged(e);
if (e.NewElement != null)
{
tabbed = (TabbedPage)e.NewElement;
}
else
{
tabbed = (TabbedPage)e.OldElement;
}
try
{
var tabbarController = (UITabBarController)this.ViewController;
if (null != tabbarController)
{
tabbarController.ViewControllerSelected += OnTabbarControllerItemSelected;
}
}
catch (Exception exception)
{
Console.WriteLine(exception);
}
}
private async void OnTabbarControllerItemSelected(object sender, UITabBarSelectionEventArgs eventArgs)
{
if (tabbed?.CurrentPage?.Navigation != null && tabbed.CurrentPage.Navigation.NavigationStack.Count > 0)
{
await tabbed.CurrentPage.Navigation.PopToRootAsync();
}
}
}
}
推荐阅读
- angular - 管道和订阅之间的实际区别是什么?
- javascript - 减少第三方代码的影响(zendesk)
- python - 无法对 Python AWS 代码进行单元测试
- google-chrome-extension - 下载带有标题的文件请求 chrome 扩展
- google-bigquery - 插入 BigQuery 时出现 Apache Beam 错误
- python - Connection.__exit__ 是否在 sqlite3 中自行关闭?
- c++ - 如何将 pow() 用于方程式并且不以 nan 结尾
- reactjs - 反应:Stackblitz 的无效钩子调用
- ios - 将 CIFilters 切换到视频
- php - 无法选择一条存在 MYSQL PHP 7 Angular 6 的记录