从Fragment访问EditTextPreference的文本

时间:2017-06-23 18:07:20

标签: android android-fragments preference edittextpreference

我使用EditTextPreference获得了Preference活动。

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

到目前为止我有什么:

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

我总是从EditTextPreference获取“Default”而不是我实际插入的文本。

先谢谢。

修改

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

pref.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" />

1 个答案:

答案 0 :(得分:1)

来自PreferenceFragment的{​​{3}}:

  

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

这意味着PreferenceFragment会将值保存到默认的共享偏好设置中,这会让您有两个选择:

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

这非常简单,您需要调用PreferenceManager的{​​{3}}静态方法来访问默认的共享首选项。而不是

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

DO

// 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上的documentation,在onCreate(...)的{​​{1}}方法中设置已使用的共享首选项的名称:

PreferenceManager