Android: 无法找到显式活动类...从PreferenceActivity启动startActivity

8
我正在尝试从PreferenceActivity启动新的Activity,但它失败了并显示“无法找到显式活动类。你在AndroidManifest.xml中声明了这个活动吗?”唔,是的,我已经声明了:
<application [......] android:debuggable="true">
    <activity android:name=".AlarmSettings"
              android:label="@string/app_name">
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />
            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>
    </activity>

    <activity android:name=".FlashLightActivity"></activity>

    <receiver
        android:name="AlarmReceiver"
        android:process=":remote" >
    </receiver>
</application>

AlarmSettings是我的PreferenceActivity。AlarmSettings通过以下方式调用FlashLightActivity:

Intent i = new Intent(AlarmSettings.this, FlashLightActivity.class);
startActivity(i);

这是FlashLightActivity:

public class FlashLightActivity extends Activity {
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.flashlight);
   }    
}

我不知道该怎么办,你有什么想法吗?


尝试在Eclipse中使用“项目->清理”,然后重新运行。 - bos
1
很奇怪,请尝试从.FlashLightActivity中删除开头的点,并使用裸露的 FlashLightActivity 名称进行测试,或者尝试提供您的活动的完整包名称,例如 com.example.FlashLightActivity - Renaud
2
该死!FlashLightActivity类在同一个包中吗?你肯定知道http://developer.android.com/guide/topics/manifest/activity-element.html#nm,但其他方面也可以帮助...在两侧(AndroidManifest和startActivity)尝试完全限定名称了吗? - Renaud
尝试了每种组合……它都不起作用。是的,完全限定名称是相同的。 所以,如果代码没问题……我只能想到一些奇怪的Eclipse问题。 - danieleds
嗯,你是指<manifest>元素吗? <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.dhss.alarmflash"package com.dhss.alarmflash;我注意到Eclipse无法生成新的bin/resources.ap_文件...它总是相同的,如果我删除它,它就无法重新创建。这可能与此有关吗? - danieleds
显示剩余2条评论
6个回答

6
我也遇到了这个问题。如果仔细阅读logcat上的错误信息,您就会知道该怎么做。
您需要在AndroidManifest.xml中声明该activity。
    <activity
        android:name=".TheNameOfMyActivity"
        android:label="@string/app_name" >
        <intent-filter>
            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>
    </activity>

25
如果你仔细阅读问题,他已经在清单中声明了! - X.X_Mass_Developer

2

当从另一个活动中启动活动时,您需要在AndroidManifest文件中提供父子关系,以确保启动的活动将其结果返回给您所需的父活动。例如,

<activity
            android:name="ACTIVITY TO BE STARTED"
            android:label="@string/TITLE"
            android:screenOrientation="landscape" >
             <meta-data
                android:name="android.support.PARENT_ACTIVITY"
                android:value="ACTIVITY STARTED FROM?RETURNING TO" />
        </activity>

2

对于我来说,这个错误是由于我将我的活动类文件移动到了不同的包中,并且由于某种原因Eclipse没有正确地重构它。始终使用完全限定名称来命名您的活动,并仔细检查其准确性。


0
在我的情况下,我只需要重命名类,因为那是Android Studio保留的单词或者有其他引用。所以:
  • 可以使用+查找并检查您建议的路径
  • 检查类中的导入并删除不必要的内容
  • 不要使用默认名称

所以不要使用例如FlashLightActivity

也许对其他人有用。


0

我曾经遇到过同样的问题,我的解决方法是在服务或布局的onCreate函数中编写意图声明。实际上这就是所说的“无法访问显式”。


0

将帖子的解决方案复制到答案部分,以便将其从“未回答”过滤器中移除:

这不是我的代码问题,而是Eclipse和Android SDK的问题。经过一些研究,我在Eclipse中执行了“帮助->检查更新”,现在一切都正常了。


1
我也遇到了这个问题。一切都很好,直到我从developer.android.com切换到Android ADT Bundle Package(Eclipse + Android SDK):(。但是你的方法对我不起作用:(。 - vanloi999
我似乎有同样的问题。我的代码似乎没问题,但不幸的是,我使用的是Android ADT Bundle,它对我来说不起作用。有什么想法吗? - GothamNite

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接