Android learning [10] PreferenceFragment preferences (2)

The previous article describes the various controls in PreferenceFragment, and then adds listener events for each control. . . .

It mainly implements three interfaces OnPreferenceClickListener, OnSharedPreferenceChangeListener and OnPreferenceChangeListener.

onPreferenceClick is the click event, which will be triggered when the Preference control is clicked. However, this method will not be called when the content of EditTextPreference is modified and confirmed again. To solve this problem, onSharedPreferenceChanged comes on stage. This method is triggered when the content of the Preference control changes. Finally, the onPreferenceChange method is used for MultiSelectList and Ringtone calls.

The details are directly on the code, so it is more clear. . .

public class SettingFragment extends PreferenceFragment implements Preference.OnPreferenceClickListener, SharedPreferences.OnSharedPreferenceChangeListener,Preference.OnPreferenceChangeListener {

    private CheckBoxPreference checkbox;
    private EditTextPreference edittext;
    private MultiSelectListPreference MultiSelectList;
    private ListPreference list;
    private RingtonePreference Ringtone;
    private SwitchPreference Switch;
    private Preference preference;

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate (savedInstanceState);
        addPreferencesFromResource(R.xml.setting);

        // Find the control based on the key value
        checkbox = (CheckBoxPreference) findPreference("checkbox");
        edittext = (EditTextPreference) findPreference("edittext");
        MultiSelectList = (MultiSelectListPreference)findPreference("MultiSelectList");
        list = (ListPreference)findPreference("list");
        Ringtone = (RingtonePreference) findPreference("Ringtone");
        Switch = (SwitchPreference) findPreference("switch");

        // set the listener
        checkbox.setOnPreferenceClickListener(this);
        edittext.setOnPreferenceClickListener(this);
        Ringtone.setOnPreferenceClickListener(this);
        MultiSelectList.setOnPreferenceChangeListener(this);
        Ringtone.setOnPreferenceChangeListener(this);

        // Get our object that stores the Preferences value and act on it accordingly
        SharedPreferences shp = PreferenceManager.getDefaultSharedPreferences(this.getActivity());
        boolean apply_Checked = shp.getBoolean("checkbox", false);

        // get history settings
        SharedPreferences sp = PreferenceManager.getDefaultSharedPreferences(this.getActivity());
        edittext.setSummary(sp.getString("edittext", ""));
    }

    @Override
    // trigger on click event
    public boolean onPreferenceClick(Preference preference) {
        // operate on the control
        if (preference == checkbox) {
            Toast.makeText(this.getActivity(), " 点击了checkbox :" + checkbox.isChecked(), Toast.LENGTH_SHORT).show();
        } else if (preference == edittext) {
            edittext.setText("");
            Toast.makeText(this.getActivity(), " 点击了edittext :" + edittext.getText(), Toast.LENGTH_SHORT).show();
        } else if (preference == Ringtone) {
            Toast.makeText(this.getActivity(), " 点击了Ringtone :" + Ringtone.getRingtoneType(), Toast.LENGTH_SHORT).show();
        }
        return true;
    }

    //Called when Preference changes
    @Override
    public void onSharedPreferenceChanged(SharedPreferences sharedPreferences, String key) {
        if (key.equals("edittext")) {
            edittext.setSummary(edittext.getText());
        }
        if (key.equals("list")) {
            list.setSummary(list.getValue());
        }
        if(key.equals("Ringtone")){
            Ringtone.setSummary(Ringtone.getRingtoneType());
        }
        if(key.equals("switch")){
            Switch.setSummary(String.valueOf(Switch.isChecked()));
        }
    }

    @Override
    public void onResume() {
        super.onResume();
        //Registration issue
        getPreferenceManager().getSharedPreferences().registerOnSharedPreferenceChangeListener(this);
    }

    @Override
    public void onPause() {
        //logout event
        getPreferenceManager().getSharedPreferences().unregisterOnSharedPreferenceChangeListener(this);
        super.onPause();
    }

    @Override
    public boolean onPreferenceChange(Preference preference, Object newValue) {
        if (preference == MultiSelectList) {
            MultiSelectList.setSummary(newValue.toString());
            return true;
        }
        if (preference == Ringtone) {
            Ringtone.setSummary(newValue.toString());
            return true;
        }
        return false;
    }
}
Source code click here

Guess you like

Origin http://43.154.161.224:23101/article/api/json?id=325764892&siteId=291194637