Android 动态添加EditTextPreference

Android 动态添加EditTextPreference,android,preferencefragment,Android,Preferencefragment,是否可以将EditTextPreference动态添加到PreferenceFragment中的PreferenceCategory?或者设置EditTextPreference的数量,然后创建尽可能多的?我将非常感谢您的帮助我正在使用一个helper类来构建EditTextPreferences,使用它我可以做到: Context context = getActivity(); PreferenceCategory statusCat = (PreferenceCategory) find

是否可以将EditTextPreference动态添加到PreferenceFragment中的PreferenceCategory?或者设置EditTextPreference的数量,然后创建尽可能多的?我将非常感谢您的帮助

我正在使用一个helper类来构建EditTextPreferences,使用它我可以做到:

Context context = getActivity();

PreferenceCategory statusCat = (PreferenceCategory) findPreference(context
            .getString(R.string.status_category));

EditTextPreference editTextPref = EditTextPrefBuilder.getBuilder(context)
                                 .setTitle("title")
                                 .setSummary("summary")
                                 .build();

statusCat.addPreference(editTextPref);
当然,您也可以在不使用此helper类的情况下创建EditTextPreference,我只是觉得使用它时代码更容易阅读:

public class EditTextPrefBuilder {

    private final Context context;

    private String title;
    private String summary;
    private boolean enabled;

    public static EditTextPrefBuilder getBuilder(Context context) {
        return new EditTextPrefBuilder(context);
    }

    EditTextPreference ep = null;

    public EditTextPreference build() {
        ep = new EditTextPreference(context);
        ep.setTitle(title);
        ep.setSummary(summary);
        ep.setEnabled(enabled);
        return ep;

    }

    private EditTextPrefBuilder(Context context) {
        super();
        this.context = context;
        this.title = "";
        this.summary = "";
        this.enabled = false;
    }

    public EditTextPrefBuilder setTitle(String title) {
        this.title = title;
        return this;
    }

    public EditTextPrefBuilder setSummary(String summary) {
        this.summary = summary;
        return this;
    }

    public EditTextPrefBuilder setEnabled(boolean enabled) {
        this.enabled = enabled;
        return this;
    }

}
最后,PreferenceCategory的一个示例显示了用于FindReference的键:

<PreferenceCategory
    android:key="@string/status_category"
    android:shouldDisableView="false"
    android:title="@string/module_status" >
    <SwitchPreference
        android:defaultValue="true"
        android:enabled="false"
        android:key="@string/key_module_activated_basis"
        android:switchTextOff="@string/deactive"
        android:switchTextOn="@string/active" />

    <CheckBoxPreference
        android:defaultValue="false"
        android:dependency="@string/key_module_activated_basis"
        android:enabled="false"
        android:key="@string/status_checkbox"
        android:selectable="false"
        android:summary="@string/please_wait"
        android:title="@string/checking" />
</PreferenceCategory>

本例设置了摘要,如果您想这样做,当然也可以设置标题。

谢谢,这很有帮助:)但您能否告诉我,单击EditPreference title后输入数据的帧的名称是什么?因为,当我改变它时,标题是不变的,我想知道这是为什么?我以为标题会改变…不知道你的意思。您的意思是输入值后EditTextPreference的值不会更改吗?是的,当我单击标题并输入数据时,数据只存储在该窗口中,而不是标题中。我相信有人会受益:)谢谢您的帮助:)
@Override public void onStart() {
    // update initial values
    updateSummaries();
    super.onStart();
}

@Override
public void onResume() {
    // listen for when preference values change
    PreferenceManager.getDefaultSharedPreferences(context)
            .registerOnSharedPreferenceChangeListener(this);

    super.onResume();
}

@Override
public void onPause() {
    PreferenceManager.getDefaultSharedPreferences(context)
            .unregisterOnSharedPreferenceChangeListener(this);
    super.onPause();
}

@Override public void onSharedPreferenceChanged(SharedPreferences prefs, String key) {
    // for simplicity update all summaries, could also inspect the key to only update that single Preference
    updateSummaries();
}

private void updateSummaries() {
    SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(context);
    // update the summary of the EditText
    String editSummary = prefs.getString("key_for_edittext");
    (EditTextPreference)findPreference("key_for_edittext").setSummary(editSummary);
}