2013-06-22 14 views
7

Jestem nowy na Androida, więc trzeba trochę wskazówek, w jaki sposób programowo dodać EditTextPreference obiektów do mojego PreferenceFragment.Jak programowo dodać EditTextPreferences do mojego PreferenceFragment?

Wyciągam listę wartości z usługi internetowej. Zapisałem je z powodzeniem na moim SharedPreferences i używam ich do generowania adresów URL (część ścieżki).

Chciałbym użytkownikom mojej aplikacji, aby móc edytować te wartości, ale po wielu wyszukiwania w Google, to nie jest dla mnie jasne, jak programowo dodać EditTextPreference obiektów do mojego PreferenceFragment .

Należy pamiętać, mój PreferenceFragment działa dobrze dla SharedPreferences wartości I ciężko jak nazwy kodowe do pliku xml preferencji (PreferenceScreen). Wiem również, jak uzyskać moją SharedPreferences, więc nie martw się o to, że musisz mi wyjaśnić tę część.

używam addPreferencesFromResource w onCreate mojego PreferenceFragment. Czy powinienem je dodać w onCreateView? Myślałem, że mogę uzyskać PreferenceCategory i dodać je tam? Ale znowu nie jestem pewien, jak to zrobić. Naprawdę będę wdzięczny za pomoc!

// Kod

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

pliku XML dla 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> 

Odpowiedz

0

Nie wiem, czy to działa w metodzie onCreateView ale robi w onViewCreated. Oto mój kod (Wewnątrz podklasy PreferenceFragment):

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

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

Możesz dodać preferencje, np EditTextPreference, CheckBox, itp., Programowo w "onCreate" metody PreferenceFragment.

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

Kluczowym krokiem jest addPreferencesFromResource(...), z manekina xml do zamocowania pustego PreferenceScreen do fragmentu. Bez tego nie ma "preferencji najwyższego poziomu, która jest źródłem hierarchii preferencji", a zatem this.getPreferenceScreen() zwraca wartość Null.

XML Kiedyś był po prostu:

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

</PreferenceScreen> 

nadzieja, że ​​ktoś pomaga.

+8

Działa to dobrze w przypadku preferencji bezmlml.W rzeczywistości nie ma potrzeby stosowania fałszywego XML, można go zamiast tego użyć: Ekran PreferenceScreen = getPreferenceManager(). CreatePreferenceScreen (getActivity()); setPreferenceScreen (ekran); – kat

Powiązane problemy