我正在阅读Android教程,但我遇到了其中一个资源ID问题。
在res\menu\main.xml
文件中,我在菜单标记中定义了action_entry
,如下所示:
<item
android:id="@+id/action_search"
android:icon="@drawable:ic_action_search"
android:title="@string:action_search"
app:showAsAction="ifRoom" />
在res\values\string.xml
文件中,我定义了以下字符串:
<string name="action_search">Search</string>
最后,在OnOptionsItemSelected()
函数中,我有以下代码引用该ID:
switch (item.getItemId()) {
case R.id.action_search:
//openSearch();
return true;
...
}
根据本教程的前一课,@ + id表示在编译应用程序时会生成ID,因此我很自然地希望case R.id.action_search:
行出错;但是,当我去运行应用程序时(我认为会在必要时触发编译),我收到一条错误消息,指出我的项目包含在运行应用程序之前必须修复的错误。
如何强制编译应用程序以便将ID添加到包含项目中ID的生成文件中?如果没有实际的编译命令,我会陷入陷阱22的状态:我无法运行应用程序,直到我修复错误,但为了修复错误,我必须编译应用程序以便它生成ID,我知道这样做的唯一方法是运行应用程序。或者,如何让IDE生成新ID,以便应用程序在运行时编译?
答案 0 :(得分:1)
即使您使用R.java
,也应自动更新@+id/
文件。但是,如果您的某个XML文件存在问题,它将不会自动更新。
<item
android:id="@+id/action_search"
android:icon="@drawable/ic_action_search"
android:title="@string/action_search"
app:showAsAction="ifRoom" />
试试这个。
答案 1 :(得分:1)
字符串名称位于R.string
类中,而不是R.id
。
编辑:好的,你还有一个同名的ID,然后应该找到它...尝试清理/重建项目。
此外,如果XML文件中存在任何错误,则必须修复它们以获取生成的Java文件。