Android:其他包中的活动错误

时间:2014-08-12 12:48:17

标签: java android

这是我的项目限制:

-com.android.test
--com.android.test.activity
---MainActivity.java
---SplashActivity.java  
--com.android.test.ui
---ActivityBase.java

我在com.android.test.activity包中创建了所有活动,并且从com.android.test.ui包中的Base活动扩展了所有活动。 但我不知道,当我在com.android.test.activity上创建活动时,我在Eclips中看到 .R 错误,但是当我在com.android.test包上创建活动时,不需要用于导入 .R 类。
我是初学者,请帮忙

1 个答案:

答案 0 :(得分:1)

构建android项目时,构建工具会生成一个名为R.java的类。因为R是一个类,它将存在于一个包中,就像所有其他类一样。默认情况下,将在您指定为项目包的包中生成R。对你而言,这应该是com.android.test

所以你的包结构实际上是这样的,即使R在gen /中,而不是src /.

-com.android.test
--R.java
--com.android.test.activity
---MainActivity.java
---SplashActivity.java  
--com.android.test.ui
---ActivityBase.java

在Java中,如果未在当前类的包中声明类,则需要import语句。因为com.android.test中未包含com.android.test.activity,因此您需要将import com.android.test.R;添加到MainActivity和SplashActivity,以便在其中使用R

如果没有为您生成R,请查看Developing for Android in Eclipse: R.java not regenerating。我可能会建议学习使用IntelliJ IDEA,因为我遇到的错误构建问题比eclipse少,但这完全是可选的。

另一个可能的错误来源是你不小心导入android.R,这是引用android SDK资源的地方。这可能会让您感到困惑,因为您可以编写R.string.foo之类的代码并认为您正在使用com.android.test.R.string.foo,但实际上,您使用的是android.R.string.foo,这可能不存在。找到问题的一种简单方法是在代码中明确说出,例如:

// you were originally getting an error here
MyActivity.this.getString(R.string.foo);

// try this to get a more obvious error, or see if it fixes it
MyActivity.this.getString(com.android.test.R.string.foo);