Ответ 1
Вы можете импортировать R.file, где захотите.
import com.myname.myapp.R;
либо используйте переменную типа
com.myname.myapp.R.id.test
У меня есть приложение, разделенное на подпакеты, только для личной организации:
com.myname.myapp
|
`- com.myname.myapp.activities
|
`- com.myname.myapp.whatever
|
`- ...
Проблема заключается в том, что сгенерированная R.java находится в com.myname.myapp
, и поэтому, когда я набираю R.id.something
в классе из подпакета com.myname.myapp.activities
, я получаю R cannot be resolved to a variable
(очевидно, я думаю).
Когда я нажимаю "Упорядочить импорт" (Ctrl + Shift + O), Eclipse исправляет его добавление import com.myname.myapp.R
вверху, и все работает отлично. Но, с другой стороны, документация на Android утверждает следующее:
Eclipse иногда нравится добавлять в android.R выражение import в верхней части ваших файлов, которые используют ресурсы, особенно если вы попросите eclipse сортировать или иным образом управлять импортом. Это заставит ваш make сломаться. Следите за этими ошибочными операциями импорта и удаляйте их
Зная, что все работает отлично, что мне делать?
Вы можете импортировать R.file, где захотите.
import com.myname.myapp.R;
либо используйте переменную типа
com.myname.myapp.R.id.test
R.java всегда создается в указанном вами месте (пакете) в файле манифеста.
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.myname.myapp"
android:versionCode="1"
android:versionName="1.0">
Для любого другого местоположения или пакета вы должны импортировать файл R.java из корневого каталога.
Надеюсь, вы поняли эту проблему.
Предупреждение имеет отношение к факту, есть две версии класса R. Существует общая версия, которая входит в состав пакетов android. android.R, и существует конкретный проект, который представляет ваши локальные файлы ресурсов (com.myname.myapp.R). Просто просмотрите их так же, как две версии классов Date в стандартной библиотеке java. (Java.util.Date и java.sql.Date) два класса с тем же именем, указанными пакетом.