如何检测PreferenceActivity的属性何时被修改

时间:2013-04-22 22:36:51

标签: android preferenceactivity

我已经创建并上课来管理我的偏好:

public class ConfigurationActivity extends PreferenceActivity{
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        addPreferencesFromResource(R.xml.preferences);
    }
}

我可以在配置中更改用户名,但是,我希望在发生这种情况时做更多的事情,我不知道当我使用这种方法来管理我时,我怎么能检测到属性已被修改偏好。

具有我想要更改的属性的xml如下所示:

<?xml version="1.0" encoding="utf-8"?>
<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android" >
    <PreferenceCategory android:title="@string/dialog_based_preferences">

        <EditTextPreference
                android:key="user_name"
                android:title="@string/title_preferences_userName"
                android:summary="@string/summary_preferences_userName"
                android:dialogTitle="@string/title_preferences_userName" />

谢谢

2 个答案:

答案 0 :(得分:2)

您需要实现OnPreferenceChangeListener界面。

您的声明将更改为

public class ConfigurationActivity extends PreferenceActivity implements 
   Preference.OnPreferenceChangeListener

您需要实施

public boolean onPreferenceChange(Preference preference, Object newValue){
    //your code here
    return true;
}

当然你不需要在这个类中实现接口,但作为一个例子,我认为它会这样做。

为了完整起见:如Hoan Nguyen所述,您需要调用方法来注册您的类以进行首选项更改。

Preference textPref = this.findPreference(R.id.user_name);
textPref.setOnPreferenceChangeListener(new OnPreferenceChangeListener() {
   @Override
   public boolean onPreferenceChange(Preference preference,
        Object newValue) {
    //Do stuff
   }
});

例如在您的onCreate()方法中。

答案 1 :(得分:1)

您使用registerOnSharedPreferenceChangeListener注册更改,每次更改偏好时都会调用onSharedPreferenceChanged。如果您只想注册所选首选项,请按DigCamara回答。