Android - ожидаемый ресурс идентификатора типа
У меня есть этот код
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, это дает мне ошибку
Поставка неверного идентификатора ресурса.
Например, при вызове Resource.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), поскольку это не обычный способ справиться с идентификаторами.
Итак, если ваше приложение поддерживает API 17 и выше,
вы можете вызвать View.generateViewId как
titleView.setId(View.generateViewId());
и
sv.setId(View.generateViewId());
и для API < 17
- откройте папку проекта
res/values/
- создайте xml файл с именем
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
Вы также можете отключить lint в файле build.gradle.
Добавьте эти строки в файл build.gradle.
android {
lintOptions{
disable "ResourceType"
}
}
Ответ 3
Я включаю это как альтернативу "исправлению" проблемы для тех, кто не может сгенерировать идентификатор вида (т.е. определить идентификатор до фактического представления) и знать, что они делают.
Непосредственно над объявлением переменной или методом, содержащим эту проблему, просто включите @SuppressWarnings("ISSUE_IDENTIFIER")
, чтобы отключить предупреждение lint для этого экземпляра.
В этом случае это будет @SuppressWarnings("ResourceType")
Использование общих методов для отключения типа предупреждения плохой практики и может привести к непредвиденным проблемам, таким как утечка памяти и нестабильный код. Не публикуйте мусор.
Обязательно отмените настройку Disable inspection
и удалите эти строки из файла build.gradle:
android {
lintOptions{
disable "ResourceType"
}
}