【问题标题】:Changing options menu icon in bottomNavigationView depending on an open Fragment根据打开的片段更改底部导航视图中的选项菜单图标
【发布时间】:2018-02-13 10:14:35
【问题描述】:

选项菜单:

    <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"/>

我想根据打开的 Fragment 以编程方式更改此项目的图标,并且显然,当用户点击此按钮时会有不同的操作。我尝试了几件事来做到这一点,但没有任何效果。

我最后尝试的是FragmentonCreateView方法中的这段代码:

Menu menu = bottomNavigationView.getMenu();
menu.findItem(R.id.ic_home).setIcon(R.drawable.ic_home_fill);

但它不适合我。

我在selectFragment(MenuItem item) 中尝试过的内容

switch (item.getItemId()) {
                case R.id.home:
                 item.setIcon(R.id.ic_home_fill);
                break;
            }

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

参考这个链接:Android: Bottom Navigation View - change icon of selected item 但这对我不起作用

请给我另一个解决方案。

谢谢

【问题讨论】:

    标签: java android fragment


    【解决方案1】:

    试试这个,它对我有用

    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;
    
                    }
                });
    

    【讨论】:

    • 这对我不起作用错误显示:Unable to start activity ComponentInfo{com.example.crm/com.example.crm.dashBoard}: java.lang.NullPointerException: Attempt to invoke interface method 'android.view.MenuItem android.view.Menu.findItem(int)' on a null object reference
    • 如果你还在使用这个代码 Menu 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而不是使用菜单
    【解决方案2】:

    在菜单中进行任何修改后,您必须在操作中进行“Invalidateoptionsmenu()”。我邀请你想测试这个功能。 see here

    【讨论】:

    • 对不起,我不明白你的意思?
    • 在 onNavigationItemSelected() 返回前添加 invalidateoptionsmenu() 。
    • 请参考我给你的文档。
    • 不适合我兄弟看看我的问题兄弟,我完美地更改了图标,但是当我选择第二个图标时,第一个图标被默认更改,但它不是
    • 如果您需要永久保存数据,您需要将其保存在共享首选项中。并从中读取。
    猜你喜欢
    • 2017-06-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-07-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多