1

我正在尝试实施OnPreferenceClickListenerPrefernceFragment似乎onPreferenceClick()从未调用过。
我有另一个PrefernceFragment实现OnSharedPreferenceChangeListener,它工作得很好。
这是操作系统的错误吗?不OnPreferenceClickListener应该支持PrefernceFragment吗?
如果在我阅读时不需要将片段注册为侦听器,那么我真的认为我的代码是正确的。

    public class myClass extends PreferenceFragment implements OnPreferenceClickListener {

    @Override
    public void onCreate(final Bundle savedInstanceState)
    {
        super.onCreate(savedInstanceState);
        addPreferencesFromResource(com.XX.ZZ.R.xml.YY);
    }

    @Override
    public boolean onPreferenceClick(Preference preference) {
        // never called.
    }
}
4

2 回答 2

4

PreferenceFragment没有onPreferenceClick()方法。由于 Android 片段负责将首选项值写入内存,因此实​​际上不需要监听点击事件。如果您确实需要观看点击事件,您可以使用findPreference(CharSequence key)找到Preference您想要观看的每个 s,然后调用setOnPreferenceClickListener(this)它们。

于 2013-11-04T21:07:09.430 回答
0

您必须根据您的偏好设置preferenceClickListener。

public class myClass extends PreferenceFragment implements OnPreferenceClickListener {

    @Override
    public void onCreate(final Bundle savedInstanceState)
    {
        super.onCreate(savedInstanceState);
        addPreferencesFromResource(com.XX.ZZ.R.xml.YY);
        Preference preference = findPreference("myPreference");
        preference.setOnPreferenceClickListener(this);
    }

    @Override
    public boolean onPreferenceClick(Preference preference) {
        // never called.
    }

更新:

如果要将 onPreferenceClickListener 设置为所有首选项,可以这样做:

public class myClass extends PreferenceFragment implements OnPreferenceClickListener {

    @Override
    public void onCreate(final Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        addPreferencesFromResource(R.menu.main);

        Set<String> preferenceNames = getPreferenceManager().getSharedPreferences().getAll().keySet();
        for (String prefName : preferenceNames) {
            Preference preference = findPreference(prefName);
            preference.setOnPreferenceClickListener(this);
        }

    }

    @Override
    public boolean onPreferenceClick(Preference preference) {
        // or get preference.getKey() to select based on preference names
        switch (preference.getOrder()) {
        case 0:

            return true;
        case 1:

            return true;

        default:
            return false;
        }
    }
}
于 2013-11-04T21:09:38.283 回答