У меня есть Preferenceactivity с EditTextPreference.
Я ищу команду для доступа к вставленному тексту 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" />
1 ответ
Из документации PreferenceFragment
:
Чтобы получить экземпляр
SharedPreferences
, который будет использовать иерархия предпочтений в этом фрагменте, вызовитеgetDefaultSharedPreferences(android.content.Context)
с контекстом в том же пакете, что и этот фрагмент.
Это означает, что PreferenceFragment
сохраняет значения в общих предпочтениях по умолчанию, что оставляет вам два варианта:
Вариант 1. Используйте значение по умолчанию SharedPreferences
, чтобы получить сохраненное значение.
Это довольно просто, вам нужно вызвать PreferenceManager
getDefaultSharedPreferences(...)
статический метод для доступа к общим параметрам по умолчанию. Так что вместо
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
на использование именованных общих настроек
Вы можете установить имя используемых общих настроек в методе onCreate(...)
вашего BarcodePreferenceFragment
, вызвав setSharedPreferencesName(...)
о принадлежности PreferenceManager
:
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
getPreferenceManager().setSharedPreferencesName("pref");
// the rest of your code
}
getContext()
. Вместо этого вы можете использовать getActivity()
, если фрагмент уже был прикреплен к Activity
.
Похожие вопросы
Новые вопросы
android
Android - это мобильная операционная система Google, используемая для программирования или разработки цифровых устройств (смартфоны, планшеты, автомобили, телевизоры, одежда, стекло, IoT). Для тем, связанных с Android, используйте специальные теги Android, такие как android-intent, android-activity, android-адаптер и т. Д. Для вопросов, не связанных с разработкой или программированием, но связанных с платформой Android, используйте эту ссылку: https: // android.stackexchange.com .
PreferenceActivity
, потому что мне кажется, что вы пытаетесь получить доступ к полю из общего префикса с именем «pref», в то время как вашPreferenceActivity
сохраняет его в другом (возможно, по умолчанию).EditTextPreference
-edit_text_preference_name
.