Search code examples
javaandroidandroid-preferencespreferences

Multiple onPreferenceChangeListeners in 1 Activity


How can I use multiple onPrefernceChangeListeners in a SettingsFragment Activity? I already have the following code:

import android.os.Bundle;
import androidx.preference.Preference;
import androidx.preference.PreferenceFragmentCompat;


public class SettingsFragment extends 
PreferenceFragmentCompat implements
    Preference.OnPreferenceChangeListener {

@Override
public void onCreatePreferences(Bundle bundle, String s) {

    addPreferencesFromResource(R.xml.preferences);

    Preference currency_list = findPreference("currency_list");
    currency_list.setOnPreferenceChangeListener(this);

    Preference switch_box_show_idle_dialog = findPreference("switch_show_idle_dialog");
    switch_box_show_idle_dialog.setOnPreferenceChangeListener(this);
}

@Override
public boolean onPreferenceChange(Preference currency_list, Object newValue){
    String currency_list_Key = currency_list.getKey();
    boolean currency_list_Value = (boolean) newValue;

    if(currency_list_Key.equals("currency_list")){
        //onChangeListener here
    }

    return true;
}

@Override
public boolean onPreferenceChange(Preference switch_show_idle_dialog, Object newValue) {
    String switch_preferenceKey = switch_show_idle_dialog.getKey();
    boolean switch_show_idle_dialog_Value = (boolean) newValue;

    if(switch_preferenceKey.equals("switch_show_idle_dialog")){
        //onChangeListener here
    }
    return true;
}

}

Android Studio marks the

public boolean onPreferenceChange(Preference switch_show_idle_dialog, Object newValue)

part red on both listeners. Is it possible to have both listeners active? If yes how?


Solution

  • You can't override a method twice in the same class, when a preference changed, the onPreferenceChange() method will call, now you can use the Preference parameter in this method to check which preference changed, so you can do like this:

    @Override
    public boolean onPreferenceChange(Preference preference, Object newValue) {
    
        if (preference.getKey().equals("switch_show_idle_dialog")) {
    
            //your code
    
            return true;
        } else if (preference.getKey().equals("currency_list")) {
    
            //your code
    
            return true;
        } else
            return false;
    }