【问题标题】:Android: Unable to find explicit activity class... startActivity from a PreferenceActivityAndroid:无法找到显式活动类...来自 PreferenceActivity 的 startActivity
【发布时间】:2011-12-18 06:38:44
【问题描述】:

我正在尝试从 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 中尝试Project-&gt;Clean,然后重新运行。
  • 这很奇怪。尝试从.FlashLightActivity 中删除开头的点并使用裸FlashLightActivity 名称进行测试,或者尝试提供您的活动的完整包名称,例如com.example.FlashLightActivity
  • 它以完全相同的方式失败:S
  • 该死! FlashLightActivity 类是否在同一个包中?您肯定知道developer.android.com/guide/topics/manifest/…,但它可以提供帮助……尝试了两边的完全限定名称(AndroidManifest 和 startActivity)?
  • 尝试了所有组合......它不起作用。是的,完全限定名称是相同的。所以,如果代码没问题……我只能想一些奇怪的Eclipse问题

标签: java android android-activity preferenceactivity


【解决方案1】:

在我的例子中,我只需要重命名这个类,因为这是从 android studio 保留的一个词或者有另一个参考,所以:

  • 可以通过crl+space 找到这个并检查您的建议路线
  • 检查类中的导入并删除不必要的
  • 不要使用默认名称

所以不要以FlashLightActivity 为例。

也许它对其他人有用

【讨论】:

    【解决方案2】:

    我遇到了同样的问题,我所做的是在服务或布局的onCreate 函数中编写 Intent 声明。实际上这就是“无法访问 Explicity”

    【讨论】:

      【解决方案3】:

      从另一个内部启动一个 Activity 时,您需要为您的 AndroidManifest 文件提供父子关系,以确保启动的 Activity 将其结果返回给您需要父 Activity。例如,

      <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>
      

      【讨论】:

        【解决方案4】:

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

        【讨论】:

          【解决方案5】:

          我也有这个问题。如果你仔细阅读logcat上的错误,你就会知道该怎么做了。

          您必须在 AndroidManifest.xml 中声明活动

              <activity
                  android:name=".TheNameOfMyActivity"
                  android:label="@string/app_name" >
                  <intent-filter>
                      <category android:name="android.intent.category.LAUNCHER" />
                  </intent-filter>
              </activity>
          

          【讨论】:

          • 如果你仔细阅读这个问题,他已经在清单中声明了它!
          【解决方案6】:

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

          这不是我的代码的问题,而是 Eclipse 和 Android 的问题 开发工具包。经过一番研究,我在 Eclipse 中做了“Help -> Check for updates” 现在一切正常。

          【讨论】:

          • 我也有这个问题。一切都很好,直到我从 developer.android.com 切换到 Android ADT Bundle Package (Eclipse + Android SDK) :(。但是你的方式对我不起作用:(
          • 我似乎遇到了同样的问题。我的代码似乎已签出,不幸的是我有 Android ADT Bundle,但它对我不起作用。有什么想法吗?
          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2017-05-18
          • 2015-05-15
          • 2014-09-13
          • 2017-06-24
          • 1970-01-01
          • 2017-09-18
          相关资源
          最近更新 更多