4

私は 2 つのアプリケーションを構築するために使用するライブラリ プロジェクトを持っています。1 つはパブリック アプリケーションで、もう 1 つは個人用のプライベート アプリケーションで、ほとんどの人にとって役に立たない設定がいくつかあります。このライブラリ プロジェクトでは、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 が定義されているライブラリ プロジェクトのパッケージです。ただし、targetPackage が子プロジェクトのものと一致しないため、子プロジェクトの 1 つからインテントが呼び出されるとクラッシュします。com.me.app_lib を com.me.app_public (子プロジェクトの 1 つのパッケージ) に変更すると機能しますが、2 つの子プロジェクトがあるため、これはオプションではありません。

このファイルを各子プロジェクトにコピーして、targetPackage 行のみを変更する必要がありますか、それともより良いオプションがありますか?

4

1 に答える 1

4

最後に、com.me.app_lib をリソース文字列として定義しました。android:targetPackage 属性は次のようになります。

android:targetPackage="@string/package_activity_preferences"

次に、この文字列に対して両方の子プロジェクトで異なる値を定義できます。これは私が望むほどきれいではありませんが、少なくとも両方の子プロジェクトで同じファイルをコピーして貼り付ける必要はありません。targetClass は私のライブラリ プロジェクトの一部なので、何も変更する必要はありません。targetPackage 属性だけが問題でした。

于 2014-09-05T03:53:53.787 に答える