如何以编程方式将EditTextPreferences添加到我的PreferenceFragment?

我是Android的新手,所以我需要一点关于如何以编程方式EditTextPreference对象添加到我的PreferenceFragment的指导

我正在从Web服务中获取值的列表。 我已经成功地将它们保存到了我的SharedPreferences中 ,并使用它们来生成URL(path部分)。

我希望我的应用程序的用户能够编辑这些值,但在Google上进行大量search之后,我不清楚如何以编程方式EditTextPreference对象添加到我的PreferenceFragment

请注意,我的PreferenceFragment工作正常,作为名称到首选项xml文件( PreferenceScreen )硬编码的SharedPreferences值。 我也知道如何获得我的SharedPreferences ,所以不必担心必须向我解释这一部分。

我在我的PreferenceFragment的 onCreate中使用addPreferencesFromResource 。 我应该添加他们在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> 

Related of "如何以编程方式将EditTextPreferences添加到我的PreferenceFragment?"

您可以在PreferenceFragment的“onCreate”方法中编程添加首选项,例如EditTextPreference,CheckBox等。

 @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()返回Null。

我用的XML只是:

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

希望能帮助别人。

我不知道它是否在onCreateView方法,但它在onViewCreated中 。 这里是我的代码(在PreferenceFragment的子类内):

 @Override public void onViewCreated(View view, Bundle savedInstanceState) { super.onViewCreated(view, savedInstanceState); this.getPreferenceScreen().addPreference(new EditTextPreference(getActivity())); }