如何在代码中更改NavigationView菜单中的MenuItem顺序?

5

我在NavigationView中有一个菜单,其中有7个菜单项,根据用户设置,其中一些菜单项应该是不可见的,剩下的可见项应该按不同的顺序显示。这些项目已经在XML菜单布局中定义好了。

我已经搜索了很多,但没有与已定义的菜单项相关的内容。大多数解决方案都建议在创建菜单项时通过代码设置顺序。

这是我的菜单项XML布局:

<group android:checkableBehavior="single">
    <item
        android:id="@+id/Home_menuitem"
        android:title="Home" />
    <item
        android:id="@+id/Register_menuitem"
        android:title="Register" />
    <item
        android:id="@+id/Login_menuitem"
        android:title="Login" />
    <item
        android:id="@+id/language_menuitem"
        android:title="Language" />
    <item
        android:id="@+id/ContactUs_menuitem"
        android:title="Contact Us" />
    <item
        android:id="@+id/Likes_menuitem"
        android:title="Likes" />
    <item
        android:id="@+id/Subscription_menuitem"
        android:title="Subscription" />
    <item
        android:id="@+id/Logout_menuitem"
        android:title="Logout" />
</group>

假设我想在代码中(而不是 XML 中)更改顺序,使“Likes_menuitem”显示在“Home_menuitem”之上

3个回答

4

我没有试过,但你可能可以按照以下步骤操作。

  1. 首先获取菜单的引用

    navigationView.getMenu()

  2. 通过添加或删除不同顺序的特定项来实现你的顺序

    add(int groupId, int itemId, int order, CharSequence title)

    removeItem(int id)

更多信息请参见docs


正如您所看到的,Add方法将创建新的菜单项!它不使用您已经在XML中拥有的MenuItem...我正在寻找一种像add(MenuItem,Order)这样简单的方法来实现它。 - Yazan Allahham
你可以使用 findItem(int id) 获取现有的菜单项,但返回的 MenuItem 没有像 setOrder(int order) 这样的方法。所以也许这是唯一的方法。这并不复杂,你至少试过了吗? - cylon
我知道这并不复杂,但我一直在寻找一个合适的方法来完成它!无论如何,我现在会立即检查并反馈。 - Yazan Allahham
由于某种原因,add 方法中的 order 参数对我没有起作用。它总是将添加的菜单项放在最后一个位置。 - YoussefDir
1
好的,我解决了。请确保对于所有项目都使用android:orderInCategory,如果您之前已经在xml菜单文件中使用过...请参见Joe Muller在此处的评论https://dev59.com/q14b5IYBdhLWcg3wxEGm - YoussefDir

0
如果您以编程方式添加项目,只需更改添加项目的顺序。即使更改菜单膨胀的位置,也会影响结果顺序。
menu.add(Menu.NONE, 898, Menu.NONE, "Item title") // <- Will be 1st
inflater.inflate(R.menu.menu_progress_avatar, menu) // <- Will be 2nd

-1

您可以通过将可见菜单项设置为true或false来实现此操作。


1
你不能通过更改项目的可见性来改变顺序...问题非常清楚!它是关于在菜单中更改项目顺序的。 - Yazan Allahham

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接