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

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

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

请注意,我的 PreferenceFragment 可以很好地用于 SharedPreferences 值(我将其硬编码为首选项xml文件中的名称)( PreferenceScreen )。我也知道如何获取 SharedPreferences ,所以不必担心必须向我解释这一部分。

我在创建 PreferenceFragment 的时,在中使用 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>

最佳答案

您可以添加首选项,例如在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附加到该 fragment 。没有这个,就没有“作为首选项层次结构根的顶级首选项”,因此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>

希望能对某人有所帮助。

关于android - 如何以编程方式将EditTextPreferences添加到我的PreferenceFragment中?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/17255383/

10-10 17:07