按钮侦听器不在Preference片段中工作

时间:2013-06-12 18:21:20

标签: android

我创建了一个实现PreferenceFragment的{​​{1}}子类。我有一个包含CompoundButton.OnCheckedChangeListenerSwitch的子类)的首选项。这是我为交换机的值改变时创建的回调:

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监听器,但这也不起作用。

2 个答案:

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