我想在我的设置页面中使用SwitchPreference,但我无法让侦听器工作。我正在使用自定义小部件布局来设计开关样式,因为我无法找到如何使用主题来实现此目的。在我的settings.xml我有以下:SwitchPreference监听器与自定义布局
<SwitchPreference
android:key="uitestmode"
android:summary="Enable to display test data in fragments"
android:title="UI Test Mode"
android:widgetLayout="@layout/widget_custom_switch_on_off" >
</SwitchPreference>
和我SettingsFragment样子:
SwitchPreference uiTestModePref = (SwitchPreference) findPreference("uitestmode");
uiTestModePref.setOnPreferenceChangeListener(new OnPreferenceChangeListener() {
@Override
public boolean onPreferenceChange(Preference preference, Object newValue) {
Log.d(preference.getKey(), newValue.toString());
return false;
}
});
和我为我的切换自定义布局:
<?xml version="1.0" encoding="utf-8"?>
<Switch xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/custom_switch_item"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:gravity="center_vertical"
android:textColor="@android:color/white"
android:textIsSelectable="false"
android:textSize="18sp"
android:textOn="On"
android:textOff="Off"
android:textStyle="bold"
android:thumb="@drawable/carcast_switch_inner_holo_dark"
android:track="@drawable/carcast_switch_track_holo_dark" />
我的问题是,当我单击开关时,侦听器不会被调用。有谁知道为什么以及如何解决它?
嘿RickCase, 我已经使用了这个,你的解决方案就像一个魅力。但我想要一些额外的功能。不知道我是否需要为它创造一个新的话题,但也许尼尔森b。奥斯汀也想要这个。 我想要的是我的喜好改变,当它被点击(你的改变做了什么),但也是可滑动的,使这个改变我的偏好。使其滑动可以通过更改android:clickable为true来完成。但他解除了以前的解决方案。 你知道一个办法吗? 亲切的问候, Jeroen – Jeroen
@Jeroen我没有机会自己尝试,但我想你可能想尝试以下操作:1.将android:clickable设置为true。将[OnCheckedChangeListener](http://developer.android.com/reference/android/widget/CompoundButton.OnCheckedChangeListener.html)设置为Switch,然后手动更新首选项。这[链接](http://stackoverflow.com/questions/552070/android-how-do-i-set-a-preference-in-code)可能会有所帮助。 – RickCase
谢谢,这是解决方案 – Jeroen