对于我正在处理的应用程序,我需要一个首选项屏幕,它有一个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?我是否需要创建自己的自定义首选项才能显示滑块首选项?以前有人有这个问题吗?感谢
答案 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);