問題

私はこの方法でXMLファイルからヘッダーを追加するPreferenceFragmentとPreferenceActivityを持っています:

PreferenceActivity

 @Override
public void onBuildHeaders(List<Header> target) {  
    if(DEBUG) Log.i("PreferenceActivity", "onBuildHeaders() -> LogicAnalizerPrefs");
    if(android.os.Build.VERSION.SDK_INT >= 12) {
        loadHeadersFromResource(R.xml.preference_header_logicanalizer, target);
    }
}
 

PreferenceFragment:

 @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        if(DEBUG) Log.i("PreferenceFragment", "onCreate() -> LogicAnalizerPrefsFragment");
        int res = getActivity().getResources().getIdentifier(getArguments().getString("logicprefsheaders"), "xml", getActivity().getPackageName());
        addPreferencesFromResource(res);
    }
 

ヘッダーがあるXMLファイルは次のとおりです。

R.xml.preference_header_logicanalizer:

 <header
        android:fragment="com.protocolanalyzer.andres.LogicAnalizerPrefsFragment"
        android:icon="@drawable/settings"
        android:title="General" >
        <extra
            android:name="logicprefsheaders"
            android:value="logicgeneral" />
    </header>
    <header
        android:fragment="com.protocolanalyzer.andres.LogicAnalizerPrefsFragment"
        android:icon="@drawable/settings"
        android:title="Canal 1" >
        <extra
            android:name="logicprefsheaders"
            android:value="c1analizerprefs" />
    </header>
    <header
        android:fragment="com.protocolanalyzer.andres.LogicAnalizerPrefsFragment"
        android:icon="@drawable/settings"
        android:title="Canal 2" >
        <extra
            android:name="logicprefsheaders"
            android:value="c2analizerprefs" />
    </header>
    <header
        android:fragment="com.protocolanalyzer.andres.LogicAnalizerPrefsFragment"
        android:icon="@drawable/settings"
        android:title="Canal 3" >
        <extra
            android:name="logicprefsheaders"
            android:value="c3analizerprefs" />
    </header>
    <header
        android:fragment="com.protocolanalyzer.andres.LogicAnalizerPrefsFragment"
        android:icon="@drawable/settings"
        android:title="Canal 4" >
        <extra
            android:name="logicprefsheaders"
            android:value="c4analizerprefs" />
    </header>
 

これは、ヘッダーをクリックしたときに設定の1つを表示するために使用される私のXMLファイルの1つです。

c1analizerprefs.xml:

 <?xml version="1.0" encoding="utf-8"?>
<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android" >

    <PreferenceCategory android:title="@string/AnalyzerProtocolTitle1" >
        <ListPreference
            android:defaultValue="0"
            android:entries="@array/protocolList"
            android:entryValues="@array/protocolValues"
            android:key="protocol1"
            android:summary="@string/AnalyzerProtocolSummary"
            android:title="@string/AnalyzerProtocolTitle1" />
        <ListPreference
            android:defaultValue="1"
            android:entries="@array/channelNames"
            android:entryValues="@array/protocolValues"
            android:key="SCL1"
            android:summary="@string/AnalyzerSCLSummary"
            android:title="@string/AnalyzerSCLTitle" />

        <EditTextPreference
            android:defaultValue="9600"
            android:title="@string/AnalyzerBaudTitle"
            android:key="BaudRate1"
            android:summary="@string/AnalyzerBaudSummary"
            android:inputType="number" />
    </PreferenceCategory>

</PreferenceScreen>
 

したがって、大きな画面では、このの結果が期待どおりにあり、PreferenceFragmentを1つだけ使用して4つのヘッダーを追加します。

しかし、 c1analizerprefs.xml

XMLファイルを使用する代わりに、JavaのヘッダーにPreferenceを追加するにはどうすればよいですか? PreferenceFragmentでは、私はaddPreferencesFromResource()またはaddPreferencesFromIntent()しか持っていません。 Preferenc

  ベストアンサー

ヘッダーを動的に追加するのは簡単ではありません。アンドロイドのドキュメントには、

blockquote Typical の実装では、loadHeadersFromResource(int, List) を使用してリソースからリストを入力します。

まだ動的なソリューションを使いたいのであれば、loadHeadersFromResourceのソースコードを見たいかもしれません(たとえば、 http://grepcode.com/file/repository.grepcode.com/java/ext/com.google.android/android/4.0.1_r1/android/preference/PreferenceActivity.java#PreferenceActivity.loadHeadersFromResource(int%2Cjava.util.List) )

要約すると、

  1. PreferenceActivity.Header オブジェクトを作成する必要があります。

  2. ドキュメントにあるさまざまなプロパティを設定することにより、使用の準備を行います。 http://developer.android.com/reference/android/preference/PreferenceActivity.Header.html

  3. 最後に作成されたヘッダーをリストに追加します:target.add(header);(ターゲットはonBuildHeadersに渡される引数です)

  同じタグがついた質問を見る

androidandroid-fragmentsandroid-preferences