猿问

如何快速删除菜单项?

我的 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>

在活动中,我有:


@Override

public 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 部分。不过,该项目仍显示在菜单中。


我还尝试从菜单中删除该项目而不是隐藏它;调试器显示该项目已删除,但在显示菜单时仍会显示该项目。


如何隐藏/删除此项目?


偶然的你
浏览 155回答 3
3回答

料青山看我应如是

你可以在onCreate()你的活动中做到这一点:NavigationView navigationView = (NavigationView) findViewById(R.id.nav_view);Menu navMenu = navigationView.getMenu();navMenu.removeItem(R.id.action_acc_upgrade);替换nav_view为您NavigationView的 id。

海绵宝宝撒

你应该onPrepareOptionsMenu像这样覆盖:@Overridepublic void onPrepareOptionsMenu(Menu menu) {&nbsp; &nbsp; super.onPrepareOptionsMenu(menu);&nbsp; &nbsp; if(isPaid()) {&nbsp; &nbsp; &nbsp; &nbsp;menu.findItem(R.id.action_settings).setVisible(false);&nbsp; &nbsp; }}注意: 确保在onPrepareOptionsMenu回调之前获取正确的 isPaid() 值,例如 inonCreate()或onResume()。

繁花不似锦

有几种选择:最方便的选择:在您的build.gradle文件中创建 2 种不同的 productFlavoursproductFlavors {&nbsp; &nbsp; free {&nbsp; &nbsp; &nbsp; ...&nbsp; &nbsp; }&nbsp; &nbsp; paid {&nbsp; &nbsp; &nbsp; ...&nbsp; &nbsp; }}然后覆盖没有action_acc_upgrade项目的菜单文件以获得付费风味。如果您想以编程方式更改可见性,请尝试使用onPrepareOptionsMenu代替onCreateOptionsMenu:@Overridepublic void onPrepareOptionsMenu(Menu menu) {&nbsp; &nbsp; super.onPrepareOptionsMenu(menu);&nbsp; &nbsp; if(isPaid()) {&nbsp; &nbsp; &nbsp; &nbsp; MenuItem upgrade = menu.findItem(R.id.action_acc_upgrade);&nbsp; &nbsp; &nbsp; &nbsp; upgrade.setEnabled(false);&nbsp; &nbsp; &nbsp; &nbsp; upgrade.setVisible(false);&nbsp; &nbsp; }}如果您需要在创建后更改菜单,请调用invalidateOptionsMenu().
随时随地看视频慕课网APP

相关分类

Java
我要回答