在底部导航栏中添加项目

时间:2018-03-05 14:43:28

标签: java android xml kotlin android-navigation-bar

我正在尝试根据API中的var来在底部菜单导航栏中添加项目。

我可以从此导航栏中删除项目,如下所示:

if (restaurant.acceptsBookings == false) {
    bottom_navigation_view.menu.removeItem(R.id.bottom_menu_book)
}

问题是,当我启动我的应用程序时,我们可以在半秒钟内看到图标,然后消失。

这并不是那么糟糕,但我希望有更好更简洁的方法来做到这一点;例如,通过在空导航栏中添加元素,而不是删除它们。

这是我的导航栏xml代码:

<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:tools="http://schemas.android.com/tools"
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto">

    <item
        android:id="@+id/bottom_menu_home"
        android:enabled="true"
        android:title="@string/bottom_menu_home"
        android:icon="@drawable/ic_home"
        app:showAsAction="ifRoom" />
    <item
        android:id="@+id/bottom_menu_menu"
        android:enabled="true"
        android:icon="@drawable/ic_menu"
        android:title="@string/bottom_menu_menu"
        app:showAsAction="ifRoom" />
    <item
        android:id="@+id/bottom_menu_profile"
        android:enabled="true"
        android:title="@string/bottom_menu_profile"
        android:icon="@drawable/ic_user"
        app:showAsAction="ifRoom" />
    <item
        android:id="@+id/bottom_menu_book"
        android:enabled="true"
        android:icon="@android:drawable/ic_menu_my_calendar"
        android:title="@string/bottom_menu_bookings"
        app:showAsAction="ifRoom" />
    <item
        android:id="@+id/bottom_menu_fidelity"
        android:enabled="true"
        android:icon="@drawable/giftgrey2"
        android:title="@string/bottom_menu_fidelity"
        app:showAsAction="ifRoom" />
</menu>

有人有解决方案吗?

提前致谢。

3 个答案:

答案 0 :(得分:0)

这听起来像是竞争条件。
您可以做的是阻止导航菜单或整个屏幕的绘制,直到您从API获得响应。这只是意味着你的应用程序将需要更长的时间才能启动。

答案 1 :(得分:0)

您可以动态添加适合您条件的菜单,而不是使用静态menu.xml文件。

也许,此链接可能有所帮助:Inflate Bottom Navigation View menu programmatically

答案 2 :(得分:0)

首先,感谢大家帮助我。

我尝试了两种方法,但它们完美运行:使用

隐藏导航栏
bottomNavigationMenu?.visibility = View.GONE

在bottomNavigationMenu声明之后,然后设置

bottomNavigationMenu?.visibility = View.VISIBLE

在API响应之后。

动态创建项目的方法也有效,这是

 bottomNavigationMenu?.menu?.add(Menu.NONE, 1, Menu.NONE, "TEST")?.setIcon(R.drawable.ic_home)

这是男人讲述的添加乐趣(来自https://developer.android.com/reference/android/view/Menu.html; ctrl + f&#34;添加&#34; 43):

groupId int:此项应属于的组标识符。这可用于定义批次状态更改的项目组。如果一个项目不在一个组中,通常使用NONE。

itemId int:唯一的商品ID。如果您不需要唯一ID,请使用NONE。

order int:商品的订单。如果你不关心,请使用NONE 订购。见getOrder()。

title CharSequence:要为项目显示的文本。

感谢大家的帮助!