Java 根据打开的片段更改bottomNavigationView中的选项菜单图标

Java 根据打开的片段更改bottomNavigationView中的选项菜单图标,java,android,fragment,Java,Android,Fragment,选项菜单: <item android:id="@+id/home" android:icon="@drawable/ic_home" android:title="Home"/> <item android:id="@+id/companies" android:icon="@drawable/ic_companies" android:title="Co

选项菜单:

    <item  
        android:id="@+id/home"
        android:icon="@drawable/ic_home"
        android:title="Home"/>

    <item  
        android:id="@+id/companies"
        android:icon="@drawable/ic_companies"
        android:title="Companies"/>

    <item  
        android:id="@+id/contact"
        android:icon="@drawable/ic_contacts"
        android:title="Contact"/>
但这对我不起作用

我在
selectFragment(菜单项)中尝试的内容

我想更改所选位置底部导航的图标。如果用户单击了一个项目,那么图标将更改为另一个,当我选择另一个项目时,第一个图标可以设置为默认值

请参阅此链接: 但这对我不起作用

请给我另一个解决办法


谢谢

在菜单中进行任何修改后,您必须在操作中创建一个“InvalidateOptions菜单()”。我邀请您测试此功能

试试这个,它对我有用

BottomNavigationView mBottomNavigationView = (BottomNavigationView) findViewById(R.id.bottom_nav);
mBottomNavigationView.setOnNavigationItemSelectedListener(new BottomNavigationView.OnNavigationItemSelectedListener() {
                @Override
                public boolean onNavigationItemSelected(MenuItem item) {
                    invalidateOptionsMenu();
                    switch (item.getItemId()) {
                        case R.id.click_to_use:
                           addHomeFragment(MainActivity.this);
                            mTitle.setText("Home");
                            item.setIcon(R.drawable.device);
                            break;
                        case R.id.history:
                           addNotifyFragment(MainActivity.this);
                            mTitle.setText("History");
                            item.setIcon(R.drawable.ios_icon);

                            break;
                        case R.id.settings:
                          addSettingFragment(MainActivity.this);
                            mTitle.setText("Settings");
                            break;
                    }

                    return true;

                }
            });

抱歉,我不明白你的意思?在返回onNavigationItemSelected()之前添加InvalidateOptions菜单()。请参阅我给您的文档。不适用于我兄弟查看我的问题兄弟我完美地更改了图标,但当我选择第二个图标时,第一个图标作为默认值更改,但不是。如果您需要永久保存数据,则需要将其保存在共享首选项中。它对我不起作用错误显示:
无法启动活动组件信息{com.example.crm/com.example.crm.dashBoard}:java.lang.NullPointerException:尝试调用接口方法'android.view.MenuItem android.view.Menu.findItem(int)'在空对象引用上
如果仍在使用此代码菜单Menu=bottomNavigationView.getMenu();menu.findItem(R.id.ic_home).setIcon(R.drawable.ic_home_fill);在这里,您使用的ID是错误的。findItem(R.ID.ic_home)您必须传递视图ID。findItem(R.ID.home)我也编辑了我的代码。您也可以直接使用mbottomnavigationview而不是使用菜单
switch (item.getItemId()) {
                case R.id.home:
                 item.setIcon(R.id.ic_home_fill);
                break;
            }
BottomNavigationView mBottomNavigationView = (BottomNavigationView) findViewById(R.id.bottom_nav);
mBottomNavigationView.setOnNavigationItemSelectedListener(new BottomNavigationView.OnNavigationItemSelectedListener() {
                @Override
                public boolean onNavigationItemSelected(MenuItem item) {
                    invalidateOptionsMenu();
                    switch (item.getItemId()) {
                        case R.id.click_to_use:
                           addHomeFragment(MainActivity.this);
                            mTitle.setText("Home");
                            item.setIcon(R.drawable.device);
                            break;
                        case R.id.history:
                           addNotifyFragment(MainActivity.this);
                            mTitle.setText("History");
                            item.setIcon(R.drawable.ios_icon);

                            break;
                        case R.id.settings:
                          addSettingFragment(MainActivity.this);
                            mTitle.setText("Settings");
                            break;
                    }

                    return true;

                }
            });