如何从VolumePreference获取设置值

时间:2017-01-10 20:31:27

标签: android android-preferences preferenceactivity

对于我正在处理的应用程序,我需要一个首选项屏幕,它有一个EditTextPreference,SwitchPreference和一个VolumePreference。我正在使用VolumePreference,因为我需要一个使用滑块设置的首选项,而VolumePreference是我能找到的唯一适合该帐单的首选项。这是我的Preference XML:

<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android">

<EditTextPreference
    android:capitalize="words"
    android:defaultValue="@string/pref_default_channel"
    android:inputType="number"
    android:key="pref_channel"
    android:selectAllOnFocus="true"
    android:singleLine="true"
    android:title="@string/pref_title_channel"
    android:summary="@string/pref_summary_channel"/>


<SwitchPreference
    android:key="pref_customVol"
    android:title="@string/pref_title_custom_vol"
    android:summary="@string/pref_summary_custom_vol"
    android:defaultValue="false" />

<VolumePreference
    android:name="Volume Preference"
    android:title="Notification Volume"
    android:summary="Set your notification volume, so you will be notified when your Seahorse is almost finished running"
    android:key="pref_notifVolPref"
    android:dependency="pref_customVol"/>

我可以使用以下代码轻松地从共享首选项中获取SwitchPreference设置的值:

    SharedPreferences sharedPref = PreferenceManager.getDefaultSharedPreferences(this);
    boolean customVol = sharedPref.getBoolean("pref_customVol", false);

但是,当我尝试从我的VolumePreference中获取值时,它总是返回默认值-1。这是我用来检索卷首选项的代码:

    SharedPreferences sharedPref = PreferenceManager.getDefaultSharedPreferences(this);
    int vol = sharedPref.getBoolean("pref_notifVolPref", -1);

我是否错误地使用了VolumePreference?我是否需要创建自己的自定义首选项才能显示滑块首选项?以前有人有这个问题吗?感谢

1 个答案:

答案 0 :(得分:1)

  • 首先扩展PreferenceActivity

  • 第二次将此添加到onCreate()

    addPreferencesFromResource(R.xml.account_preferences);

    Preference checkPreference = getPreferenceScreen().findPreference("checkbox_contacts_sync");
    Preference.OnPreferenceChangeListener lis1 = new Preference.OnPreferenceChangeListener()
    {
        @Override
        public boolean onPreferenceChange(Preference preference, Object o)
        {
            Toast.makeText(SystemManager.getAppContext(), "yess", Toast.LENGTH_LONG).show();
            return true;
        }
    };
    checkPreference.setOnPreferenceChangeListener(lis1);
    

并将其添加到布局

<ListView
              android:layout_width="match_parent"
              android:layout_height="match_parent"
              android:visibility="visible"
              android:id="@android:id/list">
    </ListView>

或者在主要活动中使用它。

SharedPreferences sharedPreferences = PreferenceManager.getDefaultSharedPreferences(this);
        SharedPreferences.OnSharedPreferenceChangeListener shListener = new SharedPreferences.OnSharedPreferenceChangeListener()
        {
            @Override
            public void onSharedPreferenceChanged(SharedPreferences sharedPref, String key)
            {
                Assistance.print("change");
                Toast.makeText(SystemManager.getAppContext(),"ohh",Toast.LENGTH_LONG).show();
            }
        };
        sharedPreferences.registerOnSharedPreferenceChangeListener(shListener);