从 Fragment 访问 EditTextPreference 的文本
Access text of EditTextPreference from Fragment
我有一个带有 EditTextPreference 的 Preferenceactivity。
我正在寻找的是从片段访问 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" />
来自PreferenceFragment
的documentation:
To retrieve an instance of SharedPreferences
that the preference hierarchy in this fragment will use, call getDefaultSharedPreferences(android.content.Context)
with a context in the same package as this fragment.
这意味着 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
设置为使用命名共享首选项
您可以在 BarcodePreferenceFragment
的 onCreate(...)
方法中设置使用的共享首选项的名称,方法是调用属于 PreferenceManager
:[=29= 的 setSharedPreferencesName(...)
]
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
getPreferenceManager().setSharedPreferencesName("pref");
// the rest of your code
}
我有一个带有 EditTextPreference 的 Preferenceactivity。
我正在寻找的是从片段访问 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" />
来自PreferenceFragment
的documentation:
To retrieve an instance of
SharedPreferences
that the preference hierarchy in this fragment will use, callgetDefaultSharedPreferences(android.content.Context)
with a context in the same package as this fragment.
这意味着 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
设置为使用命名共享首选项
您可以在 BarcodePreferenceFragment
的 onCreate(...)
方法中设置使用的共享首选项的名称,方法是调用属于 PreferenceManager
:[=29= 的 setSharedPreferencesName(...)
]
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
getPreferenceManager().setSharedPreferencesName("pref");
// the rest of your code
}