この方法で 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);
}
}
プリファレンスフラグメント:
@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>
したがって、大きな画面では、期待どおりにこの結果が得られ、1 つの PreferenceFragment のみを使用して 4 つのヘッダーを追加します。
しかし、c1analizerprefs.xml のような XML で定義された私の 4 つの設定はほとんど同じで、唯一の変更は数字 (例: Pref. 1、Pref. 2、...) であるため、使用できるように Java に追加したいfor() を使用して 4 つ以上の設定を追加する テキストが常に同じであるため、繰り返し回数を簡単に変更する 数値を変更するだけなので、この方法では設定ごとに 1 つの XML ファイルを作成する必要がなく、動的に作成しますジャワで。
XML ファイルを使用する代わりに、Java でヘッダーにプリファレンスを追加するにはどうすればよいですか? PreferenceFragment には、addPreferencesFromResource() または addPreferencesFromIntent() しかありません。設定オブジェクトを追加する方法はありますか?