从不同的包访问R.java

时间:2011-05-31 11:16:43

标签: java android eclipse sdk

我的应用程序分为子包,仅供个人组织使用:

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 documentation说明了这一点:

  Eclipse有时会喜欢在使用资源的文件顶部添加导入android.R语句,尤其是当您要求eclipse对排序或以其他方式管理导入时。这会导致你的品牌破产。留意这些错误的import语句并删除它们

知道一切正常,我该怎么办?

3 个答案:

答案 0 :(得分:24)

您可以随意导入R.file。

import com.myname.myapp.R; 

或者使用像这样的变量

com.myname.myapp.R.id.test

答案 1 :(得分:18)

总是在清单文件中提到的位置(包)上创建

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文件。

希望你理解这个问题。

答案 2 :(得分:1)

事实上警告已经存在,R类有两个版本。有一个通用版本作为android包(android.R)的一部分,并且有一个项目特定的代表您的本地资源文件(com.myname.myapp.R)。   只要看看它们就像java标准库中的两个版本的Date类一样。(java.util.Date&amp; java.sql.Date)两个类,具有相同的名称,由包指定。