我有一个包含三个Activity
的库:一个用于设置,两个在使用时需要自定义:
package com.example.lib
class SettingsActivity: AppCompatPreferenceActivity
abstract class MainActivityBase: AppCompatActivity
abstract class AboutActivityBase: AppCompatActivity
在主模块中,我有MainActivityBase
和AboutActivityBase
的子类,它们进行必要的自定义:
package com.example.app
class MainActivity: MainActivityBase
class AboutActivity: AboutActivityBase
到目前为止,一切都很好。但是,在SettingsActivity
中,我需要一个Preference
弹出AboutActivity
。如果所有内容都在一个模块中,我将执行以下操作:
将所有三个活动添加到清单中的application
:
<manifest package="com.example.app">
<application>
<activity android:name=".MainActivity">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<activity android:name=".AboutActivity"/>
<activity android:name=".SettingsActivity"/>
</application>
</manifest>
添加Preference
以将AboutActivity
打开到preferences.xml
:
<Preference android:title="@string/app_about">
<intent
android:action=".AboutActivity"
android:targetPackage="com.example.app"
android:targetClass="com.example.app.AboutActivity" />
</Preference>
这可行,但是如果我想在库包中包含SettingsActivity
(及其preferences.xml
),那么一切都会崩溃。我试过的是:
将设置活动添加到库的清单文件中:
<manifest package="com.example.lib" >
<application>
<activity android:name=".SettingsActivity"/>
</application>
</manifest>
将两个自定义活动添加到应用的清单中:
<manifest package="com.example.app">
<application>
<activity android:name=".MainActivity">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<activity android:name=".AboutActivity"/>
</application>
</manifest>
但是随后我该放在lib preferences.xml
中以链接到正确的AboutActivity
吗?我不能
<Preference>
<intent
android:action=".AboutActivity"
android:targetPackage="com.example.lib"
android:targetClass="com.example.lib.AboutActivity" />
</Preference>
因为com.example.lib.AboutActivity
当然不存在;我也不可以
<Preference>
<intent
android:action=".AboutActivity"
android:targetPackage="com.example.app"
android:targetClass="com.example.app.AboutActivity" />
</Preference>
因为将其移至库的全部目的是,还将有com.example.anotherApp
和com.example.yetMoreApp
每个都有其自己的自定义AboutActivityBase
子类。