如何在首选项被更改的情况下完成工作?

时间:2014-07-26 13:26:40

标签: android settings preferences preferencescreen

我在我的应用程序中设置了一个首选项屏幕作为设置选项,但是当用户选择或更改选项时,我对如何完成更改感到困惑。

以下是我的PreferenceScreen的xml代码:

<?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>

,这是我的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;
    }
}

我不知道我应该在onPreferenceChange上添加什么代码,以使我的偏好设置真正进行更改。

请告诉我。

任何帮助都会非常 赞赏

感谢您宝贵的时间

3 个答案:

答案 0 :(得分:1)

关于您的PreferenceActivity

  • 初始化您的CheckBoxPreference
  • 添加OnPreferenceChangeListener
  • 做任何你想改变的事情..

以下是一个例子:

    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;
        }
    });

答案 1 :(得分:1)

振动

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;
        }
    });

在AndroidManifest.xml文件中添加所需的权限:

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

如何申请您的应用程序?

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 :(得分:0)

Android会自动将其保存到SharedPreferences。 您始终可以致电:

获得所需的价值
SharedPreferences sharedPrefs = PreferenceManager.getDefaultSharedPreferences(getContext());
boolean led = sharedPrefs.getBoolean("checkBoxPrefs2", true);

其中checkBoxPrefs2是在您的布局中定义的键,true是默认值。