2013-06-22 58 views
7

我是新來的Android,所以我需要如何編程對象添加EditTextPreference我PreferenceFragment一些指導。如何以編程方式將EditTextPreferences添加到我的PreferenceFragment?

我正在拉一個web服務的值列表。我已將它們成功保存到我的SharedPreferences,並使用它們生成URL(路徑部分)。

我想我的應用程序的用戶能夠編輯這些值,但許多在谷歌搜索後,這是我不清楚如何編程添加EditTextPreference對象,以我的PreferenceFragment

請注意,我PreferenceFragment是爲SharedPreferences值我硬代碼名稱爲偏好XML文件(PreferenceScreen)工作的罰款。我也知道如何獲得我的SharedPreferences,所以不必擔心必須向我解釋這一部分。

我用addPreferencesFromResource的onCreatePreferenceFragment的。我應該將它們添加到onCreateView?我在想我可以拿到PreferenceCategory並將它們添加到那裏?但是,我不知道該怎麼做。我真的很感激幫助!

//代碼

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

爲PreferenceFragment XML文件:

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

回答

0

我不知道,如果它在onCreateView方法,但它在確實onViewCreated。 這裏是我的代碼(內部PreferenceFragment的子類):

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

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

您可以添加的偏好,例如EditTextPreference,CheckBox等等,以編程方式在PreferenceFragment的「onCreate」方法中。

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

的關鍵步驟是addPreferencesFromResource(...),與虛擬XML到空PreferenceScreen附加到片段。沒有這個,沒有「首選首選項是首選項層次結構的根」,因此this.getPreferenceScreen()返回空值。

我使用的XML只是:

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

</PreferenceScreen> 

希望幫助別人。

+8

這適用於無xml偏好。實際上不需要虛擬XML,可以使用它: PreferenceScreen screen = getPreferenceManager()。createPreferenceScreen(getActivity()); setPreferenceScreen(screen); – kat

相關問題