如所述here ,我将 PreferenceFragment 子类化并在 Activity 中显示它。该文档解释了如何监听偏好变化here ,但前提是您将 PreferenceActivity 子类化。既然我不这样做,我如何倾听偏好变化?
我尝试在我的 PreferenceFragment 中实现 OnSharedPreferenceChangeListener,但它似乎不起作用(onSharedPreferenceChanged
似乎从未被调用)。
这是我目前的代码:
SettingsActivity.java
public class SettingsActivity extends Activity
{
@Override
protected void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
// Display the fragment as the main content.
getFragmentManager().beginTransaction().replace(android.R.id.content, new SettingsFragment()).commit();
}
}
SettingsFragment.java
public class SettingsFragment extends PreferenceFragment implements OnSharedPreferenceChangeListener
{
public static final String KEY_PREF_EXERCISES = "pref_number_of_exercises";
@Override
public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
// Load the preferences from an XML resource
addPreferencesFromResource(R.xml.preferences);
}
@Override
public void onSharedPreferenceChanged(SharedPreferences sharedPreferences, String key)
{
//IT NEVER GETS IN HERE!
if (key.equals(KEY_PREF_EXERCISES))
{
// Set summary to be the user-description for the selected value
Preference exercisesPref = findPreference(key);
exercisesPref.setSummary(sharedPreferences.getString(key, ""));
}
}
}
preferences.xml
<?xml version="1.0" encoding="utf-8"?>
<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android" >
<EditTextPreference
android:defaultValue="15"
android:enabled="true"
android:key="pref_number_of_exercises"
android:numeric="integer"
android:title="Number of exercises" />
</PreferenceScreen>
另外,PreferenceFragment 是否是监听偏好变化的正确位置,还是应该在 Activity 中进行?
最佳答案
我相信您只需要在 PreferenceFragment
中注册/取消注册 Listener
即可。
@Override
public void onResume() {
super.onResume();
getPreferenceManager().getSharedPreferences().registerOnSharedPreferenceChangeListener(this);
}
@Override
public void onPause() {
getPreferenceManager().getSharedPreferences().unregisterOnSharedPreferenceChangeListener(this);
super.onPause();
}
根据您想要做什么,您可能不需要使用监听器。对首选项的更改会自动提交到 SharedPreferences
。
关于android - 如何监听 PreferenceFragment 中的偏好变化?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13596250/