我有这段代码
final static int TITLE_ID = 1;
final static int REVIEW_ID = 2;
现在,我想在我的主类
中创建一个新的布局public View createContent() {
// create linear layout for the entire view
LinearLayout layout = new LinearLayout(this);
layout.setLayoutParams(new ViewGroup.LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT,
ViewGroup.LayoutParams.WRAP_CONTENT));
layout.setOrientation(LinearLayout.VERTICAL);
// create TextView for the title
TextView titleView = new TextView(this);
titleView.setId(TITLE_ID);
titleView.setTextColor(Color.GRAY);
layout.addView(titleView);
StarView sv = new StarView(this);
sv.setId(REVIEW_ID);
layout.addView(sv);
return layout;
}
但是当我调用TITLE_ID和REVIEW_ID时,它会给我一个错误
提供错误类型的资源标识符。
例如,在调用Resources.getString(int id)时,您应该传递R.string.something,而不是R.drawable.something。
将错误的常量传递给期望一组特定常量的方法。例如,在调用View#setLayoutDirection时,参数必须是android.view.View.LAYOUT_DIRECTION_LTR或android.view.View.LAYOUT_DIRECTION_RTL。
运行此代码时没有任何问题。我只是想知道它为什么会给我一个错误。有什么想法吗?
答案 0 :(得分:98)
这不是编译器错误。这只是编辑器验证错误(lint警告),因为这不是处理ID的常用方法。
因此,如果您的应用支持API 17及更高版本,
您可以将View.generateViewId称为
titleView.setId(View.generateViewId());
和
sv.setId(View.generateViewId());
和 API< 17
res/values/
文件夹ids.xml
具有以下内容:
<?xml version="1.0" encoding="utf-8"?>
<resources>
<item name="titleId" type="id" />
<item name="svId" type="id" />
</resources>
然后在你的代码中,
titleView.setId(R.id.titleId);
和
sv.setId(R.id.svId);
并禁用此警告(如果需要)
在Android Studio中,点击灯泡上的这个&#39;错误&#39;。并在第一个子菜单中选择禁用检查。
答案 1 :(得分:24)
您还可以在build.gradle文件中禁用lint。 在build.gradle文件中添加这些行。
android {
lintOptions{
disable "ResourceType"
}
}
答案 2 :(得分:6)
我将此作为替代&#34;修复&#34;那些无法生成视图ID的问题(即在视图实际存在之前定义ID)并知道他们在做什么。
在包含该问题的变量声明或方法的正上方,只需包含@SuppressWarnings("ISSUE_IDENTIFIER")
即可禁用该实例的lint警告。
在这种情况下,它将是@SuppressWarnings("ResourceType")
使用常规方法禁用警告类型是不良做法,可能会导致无法预料的问题,例如内存泄漏和代码不稳定。不要发布垃圾。
请务必撤消Disable inspection
的选项,并从build.gradle中删除这些行:
android {
lintOptions{
disable "ResourceType"
}
}