Как определить, когда свойства 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 ответа

Решение

Вам необходимо реализовать интерфейс 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() метод.

Вы регистрируетесь для изменения, используя registerOnSharedPreferenceChangeListener а также onSharedPreferenceChanged будет вызываться каждый раз, когда изменяется предпочтение. Делай как DigCamara Ответьте, если хотите зарегистрироваться только для выбранных настроек.

Другие вопросы по тегам