首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从片段访问EditTextPreference文本

从片段访问EditTextPreference文本
EN

Stack Overflow用户
提问于 2017-06-23 18:07:20
回答 1查看 526关注 0票数 1

我有EditTextPreference的Preferenceactivity。

我要找的是从片段中访问插入的EditTextPreference文本的命令。

到目前为止我所拥有的:

代码语言:javascript
复制
SharedPreferences preferences = this.getActivity().getSharedPreferences("pref", Context.MODE_PRIVATE);
        String name = preferences.getString("edit_text_preference_name", "Default");

我总是从EditTextPreference获得“默认”,而不是实际插入的文本。

提前谢谢。

编辑:

来自SettingsActivity.java

代码语言:javascript
复制
 @TargetApi(Build.VERSION_CODES.HONEYCOMB)
    public static class BarcodePreferenceFragment extends PreferenceFragment {
        @Override
        public void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            addPreferencesFromResource(R.xml.pref_barcode);
            setHasOptionsMenu(true);

            bindPreferenceSummaryToValue(findPreference("edit_text_preference_barcode"));
            bindPreferenceSummaryToValue(findPreference("edit_text_preference_name"));
        }
}

pref.xml

代码语言:javascript
复制
<EditTextPreference
        android:capitalize="words"
        android:defaultValue="@string/pref_default_display_name"
        android:key="edit_text_preference_name"
        android:maxLines="1"
        android:selectAllOnFocus="true"
        android:singleLine="true"
        android:title="@string/pref_default_display_name" />
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-06-23 18:40:35

来自文档 of PreferenceFragment

若要检索此片段中的首选项层次结构将使用的SharedPreferences实例,请使用与此片段相同的包中的上下文调用getDefaultSharedPreferences(android.content.Context)

这意味着PreferenceFragment将值保存到默认的共享首选项,这给您留下了两个选项:

选项1-使用默认的SharedPreferences检索保存的值

非常简单,您需要调用PreferenceManagergetDefaultSharedPreferences(...)静态方法来访问默认的共享prefs。

代码语言:javascript
复制
SharedPreferences preferences = this.getActivity().getSharedPreferences("pref", Context.MODE_PRIVATE);
String name = preferences.getString("edit_text_preference_name", "Default");

代码语言:javascript
复制
// use getActivity() instead of getContext() if you're using the framework Fragment API and min SDK is lower than 23
SharedPreferences preferences = PreferenceManager.getDefaultSharedPreferences(getContext());
String name = preferences.getString("edit_text_preference_name", "Default");

选项2-将您的PreferenceFragment设置为使用命名共享prefs

您可以在BarcodePreferenceFragmentonCreate(...)方法中通过在归属PreferenceManager上调用setSharedPreferencesName(...)来设置已使用的共享prefs的名称。

代码语言:javascript
复制
@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    getPreferenceManager().setSharedPreferencesName("pref");
    // the rest of your code
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/44727552

复制
相关文章

相似问题

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