安卓 - ID 类型的预期资源

2022-08-31 22:17:15

我有此代码

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参数。

我在运行此代码时没有任何问题。我只是想知道为什么它会给我一个错误。有什么想法吗?


答案 1

这不是编译器错误。这只是编辑器验证错误(lint警告),因为这不是处理Ids的常用方法。

因此,如果你的应用支持 API 17 及更高版本,

您可以将 View.generateViewId 调用为

  titleView.setId(View.generateViewId());

  sv.setId(View.generateViewId());

API<17

  1. 打开项目的文件夹res/values/
  2. 创建一个名为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中,单击带有此“错误”的灯泡。,然后选择 禁用检查 在第一个子菜单中。


答案 2

您还可以在 build.gradle 文件中禁用 lint。将这些行添加到 build.gradle 文件中。

android { 
       lintOptions{
             disable "ResourceType"
       }
}