在我们从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中设置?
答案 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。