我正在阅读记事本教程:http://developer.android.com/resources/tutorials/notepad/notepad-ex1.html
我注意到他们提供的用于添加菜单项的代码是
menu.add(0, INSERT_ID, 0, R.string.menu_insert);
INSERT_ID早先定义为Menu.FIRST。当我在类中查找该常量时,它是一个设置为1的int。定义还有Menu.NONE,这是一个设置为0的int。
这让我想到了两件事:
从参考资料中我发现
android.view.Menu.add(int groupId, int itemId, int order, int titleRes)
其中:
groupID :此项应属于的组标识符。这个 也可用于定义批次状态更改的项目组。 如果某个项目不在群组中,则通常使用NONE。
itemID :唯一商品ID。 如果您不需要唯一ID,请使用NONE。
订单:商品的订单。 如果您不在乎,请使用NONE 订单。请参阅getOrder()。
titleRes :标题字符串的资源标识符。 [不重要 这个问题]
所以现在我更加困惑的是他们应该使用在一个地方提供的常量而忽略在另一个地方执行此操作的指令,所有这些都在同一个函数调用中。
答案 0 :(得分:0)
通常,使用常量与硬编码文字相比具有一些优势。逻辑命名常量可以提高代码的可读性。在这种特殊情况下,它没有多大帮助,但
menu.add(Menu.NONE, INSERT_ID, Menu.NONE, R.string.menu_insert);
仍然比
更具可读性menu.add(0, 1, 0, R.string.menu_insert);
定义和使用常量也有助于抽象实现细节。如果使用常量Menu.FIRST,那么您不必知道实现将第一行标识为1而不是0.如果更改了实现,则Menu.FIRST定义为0和Menu.NONE定义为-1,您无需返回并更改代码以适应更改。
在这种特殊情况下,它看起来像是一个草率编码的情况。代码在使用常量时不一致。