You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.06 08:15:00