为了账号安全,请及时绑定邮箱和手机立即绑定

如何快速删除菜单项?

如何快速删除菜单项?

偶然的你 2021-12-22 15:58:47
我的 Android 应用程序有一个带菜单的导航抽屉。在应用程序的免费版本中,我希望有一个菜单项,允许用户升级到付费版本。显然,我不希望在付费版本中出现这种情况。如何隐藏付费版本的菜单项?菜单如下所示:<?xml version="1.0" encoding="utf-8"?><menu    xmlns:android="http://schemas.android.com/apk/res/android">   <item        android:id="@+id/action_home"        android:icon="@drawable/btn_home"        android:title="@string/nav_home"        />    <item        android:id="@+id/action_acc_upgrade"        android:icon="@drawable/ic_star_black"        android:title="@string/str_acc_upgrade" />    <item        android:id="@+id/action_help"        android:icon="@drawable/ic_help_black"        android:title="@string/nav_help"        /></menu>在活动中,我有:@Overridepublic boolean onCreateOptionsMenu(Menu menu) {    super.onCreateOptionsMenu(menu);    MenuInflater inflater = this.getMenuInflater();    inflater.inflate(R.menu.activity_main_drawer, menu);    if(isPaid()) {        MenuItem upgrade = menu.findItem(R.id.action_acc_upgrade);        upgrade.setVisible(false);    }    return true;}如果我通过调试器运行它,它会到达该行if(isPaid()),然后将其评估为 true,因此进入 setVisible 部分。不过,该项目仍显示在菜单中。我还尝试从菜单中删除该项目而不是隐藏它;调试器显示该项目已删除,但在显示菜单时仍会显示该项目。如何隐藏/删除此项目?
查看完整描述

3 回答

?
料青山看我应如是

TA贡献1772条经验 获得超8个赞

你可以在onCreate()你的活动中做到这一点:


NavigationView navigationView = (NavigationView) findViewById(R.id.nav_view);

Menu navMenu = navigationView.getMenu();

navMenu.removeItem(R.id.action_acc_upgrade);

替换nav_view为您NavigationView的 id。


查看完整回答
反对 回复 2021-12-22
?
海绵宝宝撒

TA贡献1809条经验 获得超8个赞

你应该onPrepareOptionsMenu像这样覆盖:


@Override

public void onPrepareOptionsMenu(Menu menu) {

    super.onPrepareOptionsMenu(menu);

    if(isPaid()) {

       menu.findItem(R.id.action_settings).setVisible(false);

    }

}

注意: 确保在onPrepareOptionsMenu回调之前获取正确的 isPaid() 值,例如 inonCreate()或onResume()。


查看完整回答
反对 回复 2021-12-22
?
繁花不似锦

TA贡献1851条经验 获得超4个赞

有几种选择:


最方便的选择:在您的build.gradle文件中创建 2 种不同的 productFlavours


productFlavors {

    free {

      ...

    }

    paid {

      ...

    }

}

然后覆盖没有action_acc_upgrade项目的菜单文件以获得付费风味。


如果您想以编程方式更改可见性,请尝试使用onPrepareOptionsMenu代替onCreateOptionsMenu:


@Override

public void onPrepareOptionsMenu(Menu menu) {

    super.onPrepareOptionsMenu(menu);

    if(isPaid()) {

        MenuItem upgrade = menu.findItem(R.id.action_acc_upgrade);

        upgrade.setEnabled(false);

        upgrade.setVisible(false);

    }

}

如果您需要在创建后更改菜单,请调用invalidateOptionsMenu().


查看完整回答
反对 回复 2021-12-22
  • 3 回答
  • 0 关注
  • 154 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信