首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >动态添加EditTextPreference

动态添加EditTextPreference
EN

Stack Overflow用户
提问于 2014-05-13 14:49:44
回答 1查看 787关注 0票数 0

可以在EditTextPreference中动态地向PreferenceCategory添加PreferenceFragment吗?或者设置EditTextPreference的数量,然后创建相同数量的?我将非常感谢你的帮助

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-05-13 15:36:24

我使用一个帮助类来构建EditTextPreferences,我可以这样做:

代码语言:javascript
复制
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);

当然,您也可以在没有这个助手类的情况下创建EditTextPreference,我只是发现使用它时代码更容易阅读:

代码语言:javascript
复制
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示例显示了用于findPreference的键:

代码语言:javascript
复制
<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>

编辑:

如果我正确理解了评论中的问题,您可以这样做:

代码语言:javascript
复制
@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);
}

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

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/23634602

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档