如何在Fragment间跳转时实现底部导航栏自动选中对应选项
问题原因
你的代码只实现了点击底部导航项同步切换ViewPager页面的单向联动,没有做ViewPager页面变化后同步更新底部导航选中状态的反向联动,所以手动调用setCurrentItem切换页面时,底部导航的选中态不会自动同步。
解决方案
1. 修改selectFragment方法
切换ViewPager页面的同时,手动选中底部导航对应的选项:
public void selectFragment(int position){ viewPager.setCurrentItem(position, true); // 匹配位置对应的导航项ID,更新底部导航选中状态 int navItemId; switch (position) { case 0: navItemId = R.id.navigation_home; break; case 1: navItemId = R.id.navigation_category; break; case 2: navItemId = R.id.navigation_promo; break; case 3: navItemId = R.id.navigation_wishlist; break; default: navItemId = R.id.navigation_home; } navigation.setSelectedItemId(navItemId); }
2. 补充ViewPager页面切换监听(可选但推荐)
如果你的ViewPager支持滑动切换,添加以下监听可以避免滑动切换时也出现导航选中态不同步的问题,将这段代码添加到MainActivity的onCreate方法中即可:
viewPager.addOnPageChangeListener(new ViewPager.OnPageChangeListener() { @Override public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {} @Override public void onPageSelected(int position) { // 页面切换后同步更新底部导航选中态 int navItemId; switch (position) { case 0: navItemId = R.id.navigation_home; break; case 1: navItemId = R.id.navigation_category; break; case 2: navItemId = R.id.navigation_promo; break; case 3: navItemId = R.id.navigation_wishlist; break; default: navItemId = R.id.navigation_home; } navigation.setSelectedItemId(navItemId); } @Override public void onPageScrollStateChanged(int state) {} });
内容的提问来源于stack exchange,提问作者AR Hakim
相关产品推荐
相关产品推荐

