库项目中类的奇怪ActivityNotFoundException

时间:2013-10-25 11:23:05

标签: java android xml eclipse android-activity

我收到的ActivityNotFoundException项活动已存在且已包含在我的应用AndroidManifest.xml中。

以下是我的情景:

我的应用程序项目包是:com.myapplynx.mytexteditor.android

我的图书馆计划包是com.myapplynx.mytexteditor.common

我的库项目已正确包含在我的应用程序项目中,因为我可以在我的应用程序项目中使用库项目中的其他类。

活动MyTedAdvancedPreference位于com.myapplynx.mytexteditor.common.prefs包下的我的图书馆项目中。

在我的应用程序项目中,我有一个xml,res/xml/prefs.xml,我在其中定义了首选项,包括调用MyTedAdvancedPreference的首选项屏幕,如下所示:

    <PreferenceScreen android:title="@string/config_cat_advanced" >
        <intent android:action="android.intent.action.VIEW"
            android:targetPackage="com.myapplynx.mytexteditor.android"
            android:targetClass="com.myapplynx.mytexteditor.common.prefs.MyTedAdvancedPreferences"/> 

请注意,MyTedAdvancedPreferences包含在我的应用程序项目AndroidManifest.xml中:

  <application
   .....
   <activity android:name="com.myapplynx.mytexteditor.common.prefs.MyTedAdvancedPreference"
       android:label="@string/title_settings"
         android:theme="@style/MyApplynxTheme" >       
    </activity>
   ....
   </application>

我的应用程序编译并运行正常。因此,当我访问我的设置页面并尝试访问MyTedAdvancedPreference时,我会收到ActivityNotFoundException

10-25 14:15:52.734: E/AndroidRuntime(19049): FATAL EXCEPTION: main
10-25 14:15:52.734: E/AndroidRuntime(19049): android.content.ActivityNotFoundException:   Unable to find explicit activity class {com.myapplynx.mytexteditor.android/com.myapplynx.mytexteditor.common.prefs.MyTedAdvancedPreferences}; have you declared this activity in your AndroidManifest.xml?

活动在我的应用程序(com.myapplynx.mytexteditor.androidAndroidManifest.xml中定义。我究竟做错了什么?感谢。

3 个答案:

答案 0 :(得分:1)

它看起来类似于另一个问题ActivityNotFoundException when different package's targetClass in PreferenceScreen

以下是描述解决方法的答案,表明这是框架中的错误:

他建议继承“破损”活动,将继承的代码放在主应用程序项目中。然后在主要清单中按照正常情况引用它。

答案 1 :(得分:0)

在您的清单中更改此内容:

   <activity android:name="com.myapplynx.mytexteditor.common.prefs.MyTedAdvancedPreference"
   android:label="@string/title_settings"
     android:theme="@style/MyApplynxTheme" >       
</activity>

到此:

   <activity
            android:name="MyTedAdvancedPreference"
            android:label="@string/title_settings"
            android:theme="@style/MyApplynxTheme" >
            <intent-filter>
                <action android:name="example.action.ACTION_PREF_ACTIVITY" />

                <category android:name="android.intent.category.DEFAULT" />
            </intent-filter>
        </activity>

你的pref.screen应该是这样的:

    <PreferenceScreen android:title="@string/config_cat_advanced" >
        <intent android:action="example.action.ACTION_PREF_ACTIVITY" >
        </intent>
    </PreferenceScreen>

答案 2 :(得分:0)

尝试添加Intent-Filter并提供

行动(com.myapplynx.mytexteditor.common.prefs)。

  <application
       .....
       <activity android:name="com.myapplynx.mytexteditor.common.prefs.MyTedAdvancedPreference"
           android:label="@string/title_settings"
             android:theme="@style/MyApplynxTheme" >
        <intent-filter>
                <action android:name="com.myapplynx.mytexteditor.common.prefs" />

                <category android:name="android.intent.category.DEFAULT" />
            </intent-filter>       
        </activity>
       ....
       </application>

并尝试将活动称为

Intent intent=new Intent("com.myapplynx.mytexteditor.common.prefs");//action
intent.startActivity(intent);

希望它能够奏效。