Android - 类型 ID 的预期资源
Android - Expected Resource of type ID
我有这个代码
final static int TITLE_ID = 1;
final static int REVIEW_ID = 2;
现在,我想在我的主菜单中创建一个新布局 class
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 时,它都会给我一个错误
Supplying the wrong type of resource identifier.
For example, when calling Resources.getString(int id), you should be passing R.string.something, not R.drawable.something.
Passing the wrong constant to a method which expects one of a specific set of constants. For example, when calling View#setLayoutDirection, the parameter must be android.view.View.LAYOUT_DIRECTION_LTR or android.view.View.LAYOUT_DIRECTION_RTL.
我对这段代码没有任何问题运行。我只是想知道为什么它会给我一个错误。有什么想法吗?
这不是编译器错误。这只是编辑器验证错误(lint 警告),因为这不是处理 ID 的常用方法。
因此,如果您的应用支持 API 17 及更高版本,
您可以将 View.generateViewId 称为
titleView.setId(View.generateViewId());
和
sv.setId(View.generateViewId());
和 API<17
- 打开项目的
res/values/
文件夹
- 创建一个名为
ids.xml
的 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 中单击与此 'error' 一致的灯泡。并且 select 在第一个子菜单中禁用检查。
您还可以在 build.gradle 文件中禁用 lint。
在您的 build.gradle 文件中添加这些行。
android {
lintOptions{
disable "ResourceType"
}
}
我将此作为 "fixing" 问题的替代方案,适用于那些无法生成视图 ID(即在视图实际存在之前定义 ID)并知道他们在做什么的人。
在包含问题的变量声明或方法的正上方,只需包含 @SuppressWarnings("ISSUE_IDENTIFIER")
即可禁用该实例的 lint 警告。
在这种情况下,它将是 @SuppressWarnings("ResourceType")
使用通用方法禁用警告类型是不好的做法,并且可能导致不可预见的问题,例如内存泄漏和代码不稳定。请勿发布垃圾
确保撤消 Disable inspection
的选项并从 build.gradle:
中删除这些行
android {
lintOptions{
disable "ResourceType"
}
}
我有这个代码
final static int TITLE_ID = 1;
final static int REVIEW_ID = 2;
现在,我想在我的主菜单中创建一个新布局 class
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 时,它都会给我一个错误
Supplying the wrong type of resource identifier.
For example, when calling Resources.getString(int id), you should be passing R.string.something, not R.drawable.something.
Passing the wrong constant to a method which expects one of a specific set of constants. For example, when calling View#setLayoutDirection, the parameter must be android.view.View.LAYOUT_DIRECTION_LTR or android.view.View.LAYOUT_DIRECTION_RTL.
我对这段代码没有任何问题运行。我只是想知道为什么它会给我一个错误。有什么想法吗?
这不是编译器错误。这只是编辑器验证错误(lint 警告),因为这不是处理 ID 的常用方法。
因此,如果您的应用支持 API 17 及更高版本,
您可以将 View.generateViewId 称为
titleView.setId(View.generateViewId());
和
sv.setId(View.generateViewId());
和 API<17
- 打开项目的
res/values/
文件夹 - 创建一个名为
ids.xml
的 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 中单击与此 'error' 一致的灯泡。并且 select 在第一个子菜单中禁用检查。
您还可以在 build.gradle 文件中禁用 lint。 在您的 build.gradle 文件中添加这些行。
android {
lintOptions{
disable "ResourceType"
}
}
我将此作为 "fixing" 问题的替代方案,适用于那些无法生成视图 ID(即在视图实际存在之前定义 ID)并知道他们在做什么的人。
在包含问题的变量声明或方法的正上方,只需包含 @SuppressWarnings("ISSUE_IDENTIFIER")
即可禁用该实例的 lint 警告。
在这种情况下,它将是 @SuppressWarnings("ResourceType")
使用通用方法禁用警告类型是不好的做法,并且可能导致不可预见的问题,例如内存泄漏和代码不稳定。请勿发布垃圾
确保撤消 Disable inspection
的选项并从 build.gradle:
android {
lintOptions{
disable "ResourceType"
}
}