2013-06-22 17 views
7

Ich bin neu in Android, so brauche ich ein wenig Anleitung, wie man programmatisch hinzufügen EditTextPreference Objekte meiner PreferenceFragment.Wie programmiere ich EditTextPreferences programmgesteuert zu PreferenceFragment?

Ich ziehe eine Liste von Werten aus einem Webdienst. Ich habe sie erfolgreich in meinem SharedPreferences gespeichert, und ich verwende sie, um URLs (Pfadabschnitt) zu generieren.

würde ich die Benutzer meiner App möchte in der Lage sein, diese Werte zu bearbeiten, aber nach vielen auf Google zu suchen, es ist mir nicht klar, wie man programmatisch hinzufügen EditTextPreference Objekte meiner PreferenceFragment .

Bitte beachten Sie, mein PreferenceFragment funktioniert gut für den SharedPreferences Werte mich hart Code als Name in die Präferenz XML-Datei (PreferenceScreen). Ich weiß auch, wie ich meine SharedPreferences bekomme, also mach dir keine Sorgen darüber, diesen Teil mir erklären zu müssen.

Ich benutze addPreferencesFromResource in onCreate meiner PreferenceFragment. Sollte ich sie in der onCreateView hinzufügen? Ich dachte, ich könnte die PreferenceCategory bekommen und sie dort hinzufügen? Aber ich bin mir nicht sicher, wie ich das machen soll. Ich wäre wirklich dankbar für die Hilfe!

//-Code

PrefsFragment.java: 
package com.example.lorddoineedhelp; 

import android.os.Bundle; 
import android.preference.PreferenceFragment; 
import android.view.LayoutInflater; 
import android.view.View; 
import android.view.ViewGroup; 

public class PrefsFragment extends PreferenceFragment { 
    @Override 
    public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    addPreferencesFromResource(R.xml.preferences); 
    } 

    @Override 
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { 
    View v = super.onCreateView(inflater, container, savedInstanceState); 
    // I am guessing I need to do something here? 
    return v; 
    } 
} 

XML-Datei für PreferenceFragment:

<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android"> 
    <!-- Hard coded values --> 
    <PreferenceCategory 
      android:title="General"> 
    <CheckBoxPreference 
      android:key="debug" 
      android:title="Debug" 
      android:summary="Enable Debug" /> 
    </PreferenceCategory> 
    <PreferenceCategory android:title="Address"> 
    <EditTextPreference 
     android:key="ipAddress" 
     android:title="IP Address" 
     android:summary="IP Address used for Image pings" 
    /> 
    <EditTextPreference 
      android:key="port" 
      android:title="Port" 
      android:summary="Port used for Image pings" /> 
    </PreferenceCategory> 

    <!-- Where I want to add the values from my web service --> 

    <PreferenceCategory 
     android:title="Paths" 
     android:key="urlPaths"> 
    </PreferenceCategory> 
</PreferenceScreen> 

Antwort

0

Ich weiß nicht, ob es in der onCreateView Methode funktioniert, aber es funktioniert in der onViewCreated. Hier ist mein Code (innerhalb einer Unterklasse von PreferenceFragment):

@Override 
public void onViewCreated(View view, Bundle savedInstanceState) { 
    super.onViewCreated(view, savedInstanceState); 

    this.getPreferenceScreen().addPreference(new EditTextPreference(getActivity())); 
} 
13

Sie Einstellungen hinzufügen können, z EditTextPreference, CheckBox usw. programmgesteuert in der "onCreate" -Methode des PreferenceFragments.

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

    // Load "dummy" (empty) preferences from an XML resource 
    addPreferencesFromResource(R.xml.preferences_channelconfig); 

    PreferenceScreen screen = this.getPreferenceScreen(); // "null". See onViewCreated. 

    // Create the Preferences Manually - so that the key can be set programatically. 
    PreferenceCategory category = new PreferenceCategory(screen.getContext()); 
    category.setTitle("Channel Configuration"); 
    screen.addPreference(category); 

    CheckBoxPreference checkBoxPref = new CheckBoxPreference(screen.getContext()); 
    checkBoxPref.setKey(channelConfig.getName() + "_ENABLED"); 
    checkBoxPref.setTitle(channelConfig.getShortname() + "Enabled"); 
    checkBoxPref.setSummary(channelConfig.getDescription()); 
    checkBoxPref.setChecked(channelConfig.isEnabled()); 

    category.addPreference(checkBoxPref); 
} 

Der entscheidende Schritt ist die addPreferencesFromResource(...), mit einem Dummy-XML eine leere PreferenceScreen an das Fragment zu befestigen. Ohne dies gibt es keine "Präferenz der obersten Ebene, die die Wurzel einer Präferenzhierarchie ist", daher gibt this.getPreferenceScreen() Null zurück.

Die XML Ich war gerade verwendet:

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

</PreferenceScreen> 

Hoffnung, dass jemand hilft.

+8

Dies funktioniert gut für XML-weniger Einstellungen.Es gibt keine Notwendigkeit für Dummy XML, dies kann stattdessen verwendet werden: PreferenceScreen Bildschirm = getPreferenceManager(). CreatePreferenceScreen (getActivity()); setPreferenceScreen (Bildschirm); – kat

Verwandte Themen