我创建了一个实现PreferenceFragment
的{{1}}子类。我有一个包含CompoundButton.OnCheckedChangeListener
(Switch
的子类)的首选项。这是我为交换机的值改变时创建的回调:
CompoundButton
我在@Override
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
mAppController.doSomething(isChecked);
Log.v("rose_tag", "hi");
}
中声明了偏好如下:
OnCreate
当视图首次打开时(回调中的断点被点击)调用回调,但没有日志打印,并且即使我打开和关闭开关,也不会再次调用回调。如何使这个回调工作?
我也尝试过创建一个内联匿名监听器。我还尝试使用一个简单的Switch mySwitch = (Switch) myView.findViewById(R.id.switch);
mySwitch.setEnabled(true);
mySwitch.setOnCheckedChangeListener(this);
和一个Button
监听器,但这也不起作用。
答案 0 :(得分:8)
我可以看到您正在尝试使用PreferenceFragment作为任何其他正常片段。但是,您必须计算正确的机制,例如,您不能使用所有小部件为用户创建首选项视图,您必须使用Preference对象(请参阅首选项子类)。
另一个例子是您必须使用addPreferencesFromResource(int)
来扩充XML资源的首选项。
检查上面的两个链接和example。
我希望它可以帮到你。
答案 1 :(得分:2)
如果您使用Jorge Gil的anwser,您将无法轻松获得您在PreferenceScreen中声明的视图的引用。 但是,您可以轻松获得其中一个首选项Object,在这种情况下,它是一个SwitchPreference。所以在你的res / xml / preferences.xml中添加你的开关首选项:
<?xml version="1.0" encoding="utf-8"?>
<PreferenceScreen
xmlns:android="http://schemas.android.com/apk/res/android"
android:key="screen">
<SwitchPreference
android:key="switch_preference"
android:title="title"
android:summary="summary" />
</PreferenceScreen>
然后在PreferenceFragment / PreferenceActivity的onCreate函数中添加:
addPreferencesFromResource(R.xml.preferences);
SwitchPreference switchPref = (SwitchPreference) findPreference("switch_preference");
switchPref.setOnPreferenceChangeListener(new OnPreferenceChangeListener() {
@Override
public boolean onPreferenceChange(Preference preference, Object newValue) {
Log.e(getClass().getSimpleName(),"onPreferenceChange:" + newValue);
return true;
}
});