How to make things done on Preferences being changed?

≯℡__Kan透↙ 提交于 2019-12-24 15:53:20

问题


I've set up a Preference Screen as a settings option in my App, but I am totally confused about how to make the changes done when user selects or changes an Option.

Here's the xml code of my PreferenceScreen:

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

    <PreferenceCategory android:title="Notifications">
        <RingtonePreference
            android:summary="Choose a Ringtone"
            android:title="Notification Ringtone"
            android:key="ringtonePref" />
        <ListPreference
            android:title="Notification Timer"
            android:summary="Select when to Notify"
            android:dialogTitle="Show Notification after every:"
            android:positiveButtonText="OK"
            android:negativeButtonText="Cancel"
            android:entries="@array/entries"
            android:entryValues="@array/entries"
            android:key="listPrefs" />
        <ListPreference
            android:title="LED Color"
            android:summary="Choose LED Color"
            android:positiveButtonText="OK"
            android:negativeButtonText="Cancel"
            android:entries="@array/colors"
            android:entryValues="@array/colors"
            android:key="listPrefs2" />
        <CheckBoxPreference
            android:title="LED"
            android:defaultValue="true"
            android:summary="Flash LED or Not"
            android:key="checkBoxPrefs2"/>
        <CheckBoxPreference
            android:title="Vibrate"
            android:defaultValue="true"
            android:summary="Vibrate on receiving Notification"
            android:key="checkBoxPrefs3" />
    </PreferenceCategory>

    <PreferenceCategory android:title="Invite">
        <Preference android:summary="Send invitation to more peoples so that\nthey can also Learn more and more Duas."/>
    </PreferenceCategory>

    <PreferenceCategory android:title="Version">
        <Preference
            android:key="versionPrefs"
            android:summary="Version 1.0\nThank you for Downloading the App." />
    </PreferenceCategory>

</PreferenceScreen>

and here is my Settings.class:

public class Settings extends PreferenceActivity implements OnPreferenceChangeListener{

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        // TODO Auto-generated method stub
        super.onCreate(savedInstanceState);
        addPreferencesFromResource(R.xml.settings);

        //setting the properties of Action Bar
        ActionBar actionBar = getActionBar();
        actionBar.setTitle(Html.fromHtml("<font color='#FFFFFF'><strong>Settings</strong></font>"));
        actionBar.setBackgroundDrawable(new ColorDrawable(Color.parseColor("#33B5E5")));
        actionBar.setDisplayHomeAsUpEnabled(true);

        PreferenceManager.setDefaultValues(this, R.xml.settings, true);
    }

    @Override
    public boolean onPreferenceChange(Preference preference, Object newValue) {
        // TODO Auto-generated method stub
        return false;
    }
}

I don't know what code should I add to onPreferenceChange to make my Preferences actually do the change.

Please tell me.

Any help would be highly Appreciated.

Thanks for your precious time.


回答1:


For vibration

CheckBoxPreference checkBoxPrefs3 = (CheckBoxPreference) findPreference("checkBoxPrefs3");
    checkBoxPrefs3.setOnPreferenceChangeListener(new Preference.OnPreferenceChangeListener() {
        @Override
        public boolean onPreferenceChange(Preference preference, Object o) {
            if ((Boolean) o) {
                checkBoxPrefs3.setChecked(true); 
                // vibration for 800 milliseconds
                ((Vibrator)getSystemService(VIBRATOR_SERVICE)).vibrate(800);
                // TODO vibrate
            } else {
                checkBoxPrefs3.setChecked(false);
            }
            return false;
        }
    });

Required permission to add inside the AndroidManifest.xml file:

<uses-permission android:name="android.permission.VIBRATE" />

How to Apply For your App?

SharedPreferences sharedPrefs = PreferenceManager.getDefaultSharedPreferences(context);
boolean vibrate = sharedPrefs.getBoolean("checkBoxPrefs3", true);

Notification notification = new Notification(icon,
                    "message", when);
            notification.defaults |= Notification.DEFAULT_SOUND;
            if (vibrate) {
                   notification.defaults |= Notification.DEFAULT_VIBRATE;
            }

            notification.setLatestEventInfo(mContext,
                    "ticker",
                    "message", contentIntent);
            notification.flags = Notification.FLAG_AUTO_CANCEL;
            notificationManager.notify(count, notification);



回答2:


On your PreferenceActivity

  • Initialize your CheckBoxPreference
  • Add OnPreferenceChangeListener
  • Do whatever you want on change..

Here's an example:

    CheckBoxPreference checkBoxPrefs3 = (CheckBoxPreference) findPreference("checkBoxPrefs3");
    checkBoxPrefs3.setOnPreferenceChangeListener(new Preference.OnPreferenceChangeListener() {
        @Override
        public boolean onPreferenceChange(Preference preference, Object o) {
            if ((Boolean) o) {
                checkBoxPrefs3.setChecked(true); 
                // TODO vibrate
            } else {
                checkBoxPrefs3.setChecked(false);
            }
            return false;
        }
    });



回答3:


Android saves it automatically to your SharedPreferences. You can always get the desired value by calling:

SharedPreferences sharedPrefs = PreferenceManager.getDefaultSharedPreferences(getContext());
boolean led = sharedPrefs.getBoolean("checkBoxPrefs2", true);

Where checkBoxPrefs2 is key defined in your layout and true is default value.



来源:https://stackoverflow.com/questions/24971487/how-to-make-things-done-on-preferences-being-changed

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!