Is it okay to use manual callback methods to initialize the default values?

I ran into Android customization activity (to support devices below 3.0, not the new preference snippet)

In the code example below, to display the currently selected value in the summary for the first time, they make a call onPreferenceChange(..)

, which in this case is a manual callback method.

Although I figured out the whole process, it took me a long time to figure out what was going on because I am new to android and I have never used to call listeners like actionPerformed(...)

in a class ActionListener

, etc. / p>

Is this bad practice? , any good alternatives to this?

SettingsActivity.class

public class SettingsActivity extends PreferenceActivity
        implements Preference.OnPreferenceChangeListener {
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
// Add 'general' preferences, defined in the XML file
    addPreferencesFromResource(R.xml.pref);

// For all preferences, attach an OnPreferenceChangeListener so the UI summary can be
// updated when the preference changes.
        bindPreferenceSummaryToValue(findPreference(getString(R.string.pref_location_key)));//used here similar to a view id
        //getString(R.String...) extracts the string value from strings.xml
    }
    /**
     * Attaches a listener so the summary is always updated with the preference value.
     * Also fires the listener once, to initialize the summary (so it shows up before the value
     * is changed.)
     */
    private void bindPreferenceSummaryToValue(Preference preference) {
// Set the listener to watch for value changes.
        preference.setOnPreferenceChangeListener(this);
// Trigger the listener immediately with the preference's
// current value.
        onPreferenceChange(preference,
                PreferenceManager
                        .getDefaultSharedPreferences(preference.getContext())
                        .getString(preference.getKey(), ""));
    }
    @Override
    public boolean onPreferenceChange(Preference preference, Object value) {
        String stringValue = value.toString();
        if (preference instanceof ListPreference) {
// For list preferences, look up the correct display value in
// the preference 'entries' list (since they have separate labels/values).
            ListPreference listPreference = (ListPreference) preference;
            int prefIndex = listPreference.findIndexOfValue(stringValue);
            if (prefIndex >= 0) {
                preference.setSummary(listPreference.getEntries()[prefIndex]);
            }
        } else {
// For other preferences, set the summary to the value simple string representation.
            preference.setSummary(stringValue);
        }
        return true;
    }
}

      

+3


source to share





All Articles