1

我有一个带有 EditTextPreference 的 Preferenceactivity。

我正在寻找的是从片段访问 EditTextPreference 的插入文本的命令。

到目前为止我所拥有的:

SharedPreferences preferences = this.getActivity().getSharedPreferences("pref", Context.MODE_PRIVATE);
        String name = preferences.getString("edit_text_preference_name", "Default");

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

提前致谢。

编辑:

来自 SettingsActivity.java

 @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"));
        }
}

首选项.xml

<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" />
4

1 回答 1

1

从以下文档PreferenceFragment

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

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

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

这很简单,您需要调用PreferenceManagergetDefaultSharedPreferences(...)静态方法来访问默认的共享首选项。所以而不是

SharedPreferences preferences = this.getActivity().getSharedPreferences("pref", Context.MODE_PRIVATE);
String name = preferences.getString("edit_text_preference_name", "Default");

// 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使用命名的共享首选项

您可以通过调用属性在您的方法中BarcodePreferenceFragment设置使用的共享首选项的名称:onCreate(...)setSharedPreferencesName(...)PreferenceManager

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    getPreferenceManager().setSharedPreferencesName("pref");
    // the rest of your code
}
于 2017-06-23T18:40:35.840 回答