我有一个图书馆项目,我用它来构建两个应用程序,一个是公共的,一个是个人使用的私有,只有少数设置对大多数人来说没用。在这个库项目中,我定义了一个PreferenceActivity(用于API< Honeycomb)和一些PreferenceFragments(用于API> = Honeycomb),使用本指南的首选项标题:http://developer.android.com/guide/topics/ui/settings.html#BackCompatHeaders
为了支持旧设备,我定义了这个XML文件,如指南所示:
<?xml version="1.0" encoding="utf-8"?>
<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android" >
<Preference
android:title="@string/base_de_donnees"
android:summary="@string/summary_pref_restaurer_bdd_sd">
<intent
android:targetPackage="com.me.app_lib"
android:targetClass="com.me.app_lib.activities.preferences.SettingsActivity"
android:action="com.me.app_lib.activities.preferences.SettingsActivity.ACTION_PREF_BDD" />
</Preference>
<Preference
android:title="@string/saisie"
android:summary="@string/summary_pref_saisie">
<intent
android:targetPackage="com.me.app_lib"
android:targetClass="com.me.app_lib.activities.preferences.SettingsActivity"
android:action="com.me.app_lib.activities.preferences.SettingsActivity.ACTION_PREF_SASISIE" />
</Preference>
</PreferenceScreen>
com.me.app_lib是库项目的包,其中定义了SettingsActivity。 但是,当从其中一个子项目调用intent时,我遇到崩溃,因为targetPackage与子项目的目标不匹配。如果我将com.me.app_lib更改为com.me.app_public(其中一个子项目的包)它可以工作,但由于我有两个子项目,所以这不是一个选项。
我是否必须将此文件复制到每个子项目并仅更改targetPackage行,还是有更好的选择?
答案 0 :(得分:3)
我最后做的是将com.me.app_lib定义为资源字符串。 android:targetPackage属性变为:
android:targetPackage="@string/package_activity_preferences"
然后我可以在这个字符串的两个子项目中定义一个不同的值。这并不像我希望的那样干净,但至少我不需要在两个子项目中复制粘贴相同的文件。 targetClass是我的库项目的一部分,所以我不需要改变它的任何内容;只有targetPackage属性才有问题。