Android Studio滑动切换Fragment时底部导航栏图标不更新如何解决
修复方案
问题根因
当前仅实现了底部导航栏点击 → 切换ViewPager页面的单向绑定逻辑,缺少ViewPager滑动切换页面时反向同步底部导航选中状态的监听,因此滑动切换时底部图标不会同步更新。
代码修改
仅需在MainActivity.java的onCreate方法中新增ViewPager的页面切换监听即可,完整修改后的MainActivity.java代码如下:
package com.example.bottom_nav; import androidx.annotation.NonNull; import androidx.appcompat.app.AppCompatActivity; import androidx.viewpager2.widget.ViewPager2; import com.example.bottom_nav.databinding.ActivityMainBinding; import com.google.android.material.navigation.NavigationBarView; import android.os.Bundle; import android.view.MenuItem; import android.view.ViewGroup; public class MainActivity extends AppCompatActivity { ActivityMainBinding ui; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); ui = ActivityMainBinding.inflate(getLayoutInflater()); ViewGroup root = ui.getRoot(); setContentView(root); //实例化3个Fragment ViewPageAdapter viewPageAdapter = new ViewPageAdapter(this); ui.viewPager.setAdapter(viewPageAdapter); //将3个Fragment和底部导航栏对应图标关联 ui.bottomNav.setOnItemSelectedListener( new NavigationBarView.OnItemSelectedListener(){ @Override public boolean onNavigationItemSelected(@NonNull MenuItem item) { switch (item.getItemId()){ case R.id.ic_birthdays: ui.viewPager.setCurrentItem(0); break; case R.id.ic_add: ui.viewPager.setCurrentItem(1); break; case R.id.ic_profile: ui.viewPager.setCurrentItem(2); break; } return true; } } ); // 新增:ViewPager滑动切换时同步底部导航选中状态 ui.viewPager.registerOnPageChangeCallback(new ViewPager2.OnPageChangeCallback() { @Override public void onPageSelected(int position) { super.onPageSelected(position); switch (position) { case 0: ui.bottomNav.setSelectedItemId(R.id.ic_birthdays); break; case 1: ui.bottomNav.setSelectedItemId(R.id.ic_add); break; case 2: ui.bottomNav.setSelectedItemId(R.id.ic_profile); break; } } }); } }
其他笔误修复
你当前的profile.java中加载的布局存在错误,代码写的是R.layout.fragment_add,请修改为对应个人页的布局R.layout.fragment_profile,避免页面内容重复。
内容的提问来源于stack exchange,提问作者Boyapati Sandeep
相关产品推荐
相关产品推荐

