重用和自定义库活动并从“首选项”中使用它

时间:2018-07-28 05:03:45

标签: android android-activity android-preferences android-library

我有一个包含三个Activity的库:一个用于设置,两个在使用时需要自定义:

package com.example.lib

class SettingsActivity: AppCompatPreferenceActivity
abstract class MainActivityBase: AppCompatActivity
abstract class AboutActivityBase: AppCompatActivity

在主模块中,我有MainActivityBaseAboutActivityBase的子类,它们进行必要的自定义:

package com.example.app

class MainActivity: MainActivityBase
class AboutActivity: AboutActivityBase

到目前为止,一切都很好。但是,在SettingsActivity中,我需要一个Preference弹出AboutActivity。如果所有内容都在一个模块中,我将执行以下操作:

  1. 将所有三个活动添加到清单中的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>
    
  2. 添加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),那么一切都会崩溃。我试过的是:

  1. 将设置活动添加到库的清单文件中:

    <manifest package="com.example.lib" >
        <application>
            <activity android:name=".SettingsActivity"/>
        </application>
    </manifest>
    
  2. 将两个自定义活动添加到应用的清单中:

    <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>
    
  3. 但是随后我该放在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.anotherAppcom.example.yetMoreApp每个都有其自己的自定义AboutActivityBase子类。

0 个答案:

没有答案