Xamarin Android底部导航栏新SetOnItemSelectedListener如何实现?
Android API 30起,BottomNavigationView的SetOnNavigationItemSelectedListener方法及对应NavigationItemSelected事件已被废弃,需替换为新的SetOnItemSelectedListener及ItemSelected事件实现同等功能。
直接替换后的业务代码
bottomNavigation = FindViewById<BottomNavigationView>(Resource.Id.navigation); // 若你的Activity/Fragment实现了对应监听接口,使用这行替换原有监听设置 bottomNavigation.SetOnItemSelectedListener(this); // 替换事件订阅,原有业务逻辑基本无需改动 bottomNavigation.ItemSelected += Navigation_ItemSelected;
事件回调方法适配
原有Navigation_NavigationItemSelected方法仅需调整参数类型即可复用:
private void Navigation_ItemSelected(object sender, BottomNavigationView.ItemSelectedEventArgs e) { // 原有逻辑直接复用,e.Item对应之前的选中菜单项 switch (e.Item.ItemId) { case Resource.Id.nav_home: // 首页跳转逻辑 break; case Resource.Id.nav_dashboard: // 仪表盘跳转逻辑 break; case Resource.Id.nav_mine: // 个人中心跳转逻辑 break; } }
接口实现方式适配
如果你之前是让Activity/Fragment实现IOnNavigationItemSelectedListener接口,现在替换为实现Google.Android.Material.BottomNavigation.IOnItemSelectedListener接口即可,方法逻辑直接复用:
// 替换原有IOnNavigationItemSelectedListener的实现方法 public bool OnItemSelected(IMenuItem item) { switch (item.ItemId) { // 原有case判断逻辑直接复用 } // 返回true表示消费该选中事件 return true; }
注意事项
- 需保证项目引用的
Xamarin.Google.Android.MaterialNuget包版本升级到1.3.0及以上,才能正常调用新接口 - 新的
ItemSelected事件默认会自动处理底部导航栏的选中状态高亮,无需额外手动调用SetChecked
内容的提问来源于stack exchange,提问作者Blackie
相关产品推荐
相关产品推荐

