我有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"));
}
}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" />发布于 2017-06-23 18:40:35
来自文档 of PreferenceFragment
若要检索此片段中的首选项层次结构将使用的
SharedPreferences实例,请使用与此片段相同的包中的上下文调用getDefaultSharedPreferences(android.content.Context)。
这意味着PreferenceFragment将值保存到默认的共享首选项,这给您留下了两个选项:
选项1-使用默认的SharedPreferences检索保存的值
非常简单,您需要调用PreferenceManager的getDefaultSharedPreferences(...)静态方法来访问默认的共享prefs。
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设置为使用命名共享prefs
您可以在BarcodePreferenceFragment的onCreate(...)方法中通过在归属PreferenceManager上调用setSharedPreferencesName(...)来设置已使用的共享prefs的名称。
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
getPreferenceManager().setSharedPreferencesName("pref");
// the rest of your code
}https://stackoverflow.com/questions/44727552
复制相似问题