So fügen Sie eine Kopf-und Präferenz-Objekt PreferenceActivity nicht mit einer XML-Datei, aber Java?

Habe ich PreferenceFragment und eine PreferenceActivity, von dem ich hinzufügen-Header aus einer XML-Datei auf diese Weise:

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);
    }

Sowie die XML-Datei, wo ich den Header ist:

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>

- Und dies ist einer meiner xml-Dateien, die verwendet werden, um anzuzeigen, die Einstellungen beim klicken auf einen Header:

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>

So, in einer großen screen-ich habe diese Ergebnis wie erwartet und ich nur ein PreferenceFragment, um meinen 4-Header.

Aber meine vier Voreinstellungen definiert in der XML wie c1analizerprefs.xml sind fast die gleichen die einzige änderung ist eine Zahl (Zum Beispiel: Pref. 1, Pref. 2, ...), so möchte ich hinzufügen, dass Sie in Java so kann ich mit einer for() zum hinzufügen von 4 oder mehr Einstellungen einfach ändern Sie die Anzahl der Wiederholungen, denn der text ist immer der gleiche ich habe nur eine Nummer ändern, so dass auf diese Weise ich don ' T brauchen zu erstellen eine XML-Datei für jede Vorliebe, ich erstellen Sie dynamisch in Java.

Wie kann ich eine Präferenz für einen Header in Java anstelle der Verwendung einer XML-Datei? In PreferenceFragment ich habe nur addPreferencesFromResource() oder addPreferencesFromIntent(). Eine Möglichkeit, fügen Sie eine Präferenz für ein Objekt?

InformationsquelleAutor Andres | 2013-04-01
Schreibe einen Kommentar