以编程方式将视图ID分配给MenuItem

时间:2018-01-03 13:40:58

标签: android xml menuitem

在我们从JSON创建侧面导航时,我们正在以编程方式创建MenuItem

MenuItem currentItem = navigationMenu.add(groupId, R.id.menu_login, order, title);

id在XML资源文件中定义。

调用currentItem.getItemId()会返回设置ID。但是,使用Android Studio的布局检查器会显示实际View已设置无ID 。问题是我们需要为自动化测试框架提供此ID以访问抽屉中的正确导航项。

有没有办法将此ID设置为View,因为它将在XML中设置?

1 个答案:

答案 0 :(得分:0)

使用NavigationView并通过Menu驱动商品时(无论是使用xml属性app:menu还是使用NavigationView的getMenu()方法) ,用户最终看到的实际视图是NavigationMenuView。这是ListView的一个特殊子类,您永远都不会想到的(它在库的internal包中)。

此ListView中的视图为NavigationMenuItemView,由NavigationMenuAdapter创建。它们也是您永远都不应考虑的东西。

所有这些都是说,当您使用NavigationView + Menu时,无法为布局中的视图分配ID。即使您等待系统将所有内容充气起来并显示出来,然后尝试手动爬网视图树并设置ID,您仍然必须应对导航抽屉是ListView的事实,因此无法保证它的第一个孩子是菜单中的第一个选项。


但是,导航抽屉不需要使用NavigationView + Menu。您可以可以简单地使用LinearLayout,然后向其中添加您自己的自定义视图(或仅添加TextView)。您已经已经遇到了手动创建MenuItem的麻烦,因此创建TextView不会困难得多。

在这种情况下,您完全可以控制视图树,因此您可以做任何想做的事情,包括设置视图ID。