Ошибка «идентификатор не может быть разрешена или не является полем»? - PullRequest
26 голосов
/ 21 июля 2010

Я получаю эту ошибку.Должен ли я просто сделать id полем?

Мой код:

public void onCreate(Bundle icicle) 
{
    super.onCreate(icicle);
    setContentView(R.layout.main);
    ImageView mainimage = (ImageView) findViewById(R.id.mainanim);
    mainimage.setBackgroundResource(R.anim.mainanim);
    mainanimation = (AnimationDrawable) mainimage.getBackground();
}

Как именно это исправить?

Ответы [ 17 ]

50 голосов
/ 21 июля 2010

Посмотрите на свои import утверждения наверху.Если вы говорите import android.R, то здесь есть проблема.Это может быть не единственная ошибка, поскольку эти 'R' ошибки могут быть хитрыми, но это определенно, по крайней мере, часть проблемы.

Если это не помогает, убедитесь, что ваш плагин eclipse (ADT) и ваш Android SDK полностью обновлены, удалите проект из эмулятора / телефона, вручную удалив его из ОС, и очиститепроект (Запустите Eclipse-> Project-> Clean ...).Звучит глупо, чтобы убедиться, что ваш материал полностью обновлен, но более ранние версии ADT и SDK содержат много досадных ошибок, связанных с файлами R, которые с тех пор были очищены.

Только к вашему сведению, материал, который отображается в классе R, генерируется из материала в папке res вашего проекта (он же ресурсы).Класс R позволяет вам ссылаться на ресурс (например, изображение или строку) без необходимости выполнять файловые операции повсеместно.Это делает и другие вещи, но это для другого ответа.ОС Android использует аналогичную схему - у нее есть папка ресурсов, а класс android.R - это способ доступа к материалам в папке ресурсов Android.Проблема возникает, когда в одном классе вы используете как свои собственные ресурсы, так и стандартные ресурсы Android.Обычно вы можете сказать import вверху, а затем ссылаться на класс, просто используя последний бит имени (например, import java.util.List позволяет просто написать List в вашем классе, и компилятор знает, что вы имеете в виду java.util.List).Когда вам нужно использовать два класса с одинаковыми именами, как в случае с автоматически сгенерированным классом R, вы можете импортировать один из них, и вам придется полностью квалифицировать другой, когда вы хотите это иметь в виду.Обычно я импортирую R-файл для своего проекта, а затем просто говорю android.R. независимо от того, когда я хочу ресурс Android.

Также, чтобы повторить Энди, не изменяйте R-файл автоматически.Это не так, как это должно быть использовано.

44 голосов
/ 21 июля 2010

Не изменяйте класс R.Ошибка означает, что с вашими макетами XML что-то не так, и R не может быть сгенерирован автоматически.Попробуйте поискать там и опубликуйте код xml, в котором вы не уверены, если таковой имеется.

Редактировать: также: удалить «import android.R» из импорта в начале файла (если есть)

29 голосов
/ 10 мая 2012

Одно из возможных решений: -

Резюме: убедитесь, что вы используете import com.yourpkgdomainname.yourpkgappname.R вместо import android.R

Подробности: Возникла проблема, когда я изменил идентификатор метки, на которую ссылались в других местах XML-файла макета.Из-за этой ошибки файл R сначала перестал генерироваться.Eclipse плохо обрабатывает ошибки с файлами макетов.

Когда я исправил ссылку на идентификатор (несколько раз после очистки проекта и перезапуска Eclipse, я заметил, что мои пакеты импорта теперь имеют:
import android.R

Изменение в следующее исправило ошибку:
import com.example.app.R

6 голосов
/ 17 апреля 2012

Я только что исправил проблему, щелкнув правой кнопкой мыши в папке макета и выбрав опцию Подтвердить. Появятся некоторые окна, вы просто нажали OK и все в порядке.

5 голосов
/ 15 декабря 2010

Может быть, вы создали новый XML-файл в каталоге раскладок, имя которого содержит заглавную букву, что недопустимо в файле XML в каталоге раскладок.

Надеюсь, эта справка.

3 голосов
/ 04 июля 2011

Как уже упоминал Джейк, проблема может быть в коде копирования / вставки. Проверьте main.xml в res / layout. Если в этом поле нет идентификатора, значит, у вас проблема. Типичный пример будет следующим:

<com.androidplot.xy.XYPlot
android:id="@+id/mySimpleXYPlot"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:layout_marginTop="10px"
android:layout_marginLeft="20px"
android:layout_marginRight="20px"
title="A Simple Example"
/>

3 голосов
/ 03 июня 2011

Просто добавьте это туда, но попробуйте набрать вещи вручную. Существует вероятность того, что ваши кавычки являются «неправильными», поскольку есть аналогичный символ Unicode, который выглядит аналогично, но НЕ кавычки.

Если вы скопировали / вставили фрагменты кода с веб-сайта, это может быть вашей проблемой.

3 голосов
/ 10 октября 2012

Иногда затмение может спутать с другими проектами в том же каталоге.

Просто измените имя пакета (не забудьте также изменить в файле манифеста Android), убедитесь, что имя пакета уже не используется в каталоге.Это может сработать.

2 голосов
/ 19 февраля 2012

У меня также была эта ошибка, когда я однажды работал в классе Java.Моя проблема была просто в том, что мой XML-файл со ссылками в нем не был сохранен.Если у вас есть как XML-файл, так и класс Java, открытый на вкладках, убедитесь, что имя XML-файла на вкладке не имеет *.

2 голосов
/ 05 ноября 2011

Мне было достаточно боли, но я нашел решение:

PROJECT ---> Clean ----> (Sele)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...