有没有一种方法可以处理API11中的OnPreferenceChangeListener。简单地调用Preference.setOnPreferenceChangeListener会抛出一个错误消息,指出它需要API14 +,但是我的应用程序是为API11 +设计的,我不想限制它可以进一步运行的设备数量。

更新:我已经签入了开发文档,应该可以从API1获得

编辑:代码

import android.os.Bundle;
import android.preference.Preference;
import android.preference.Preference.OnPreferenceChangeListener;
import android.preference.PreferenceActivity;
import android.preference.SwitchPreference;

@SuppressWarnings("deprecation")
public class SettingsActivity extends PreferenceActivity {
private static final String tag = "PREFERENCES";
SwitchPreference appPower;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    addPreferencesFromResource(R.xml.preferences_layout);

    setupPreferenceElements();

    LogHelper.i(tag, "Preferences Activity Started");
}

private void setupPreferenceElements() {
    appPower = (SwitchPreference) getPreferenceManager().findPreference(
            "power");
    appPower.setChecked(SettingsManager.getPower());
    appPower.setOnPreferenceChangeListener(new OnPreferenceChangeListener() {
        @Override
        public boolean onPreferenceChange(Preference preference,
                Object newValue) {
            LogHelper.i(tag, "App Power Changed to " + newValue.toString());
            SettingsManager.setPower(Boolean.parseBoolean(newValue
                    .toString()));
            return true;
            }
        });
    }
}

最佳答案

android.preference.SwitchPreference仅在API v14中添加(与TwoStatePreference一起添加,以防您的第一个使用它)

如果要继续将SwitchPreference用于14+和支持13-,则需要:


制作文件夹res/xml-v14/
将当前的preferences.xml与您的SwitchPreference一起使用
使用另一个res/xml/创建另一个文件夹(如果需要)preferences.xml,并将SwitchPreference更改为CheckBoxPreference。


然后,这将根据所使用的API版本加载正确的版本。您还需要在Java代码中检查API版本。

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.ICE_CREAM_SANDWICH) {
    appPower = new SwitchPreference(this);
} else {
    appPower = new CheckBoxPreference(this);
}


如果您不喜欢CheckboxPreference,则可以始终extend Preferenceextend CheckboxPreference并推出自己的解决方案。实际上,这可能是最好的解决方案,因为它的优点是能够将两个版本包装在一个类中,然后您可以在其中支持您的首选实现,并确保要使用的方法公开且不会失败,而无需进行手动版本检查在使用“首选项”的任何地方键入强制类型转换。

在进行一些搜索时,我偶然发现了您可能会使用的this library。它旨在提供对SwitchPreference的支持。我无法说说它的工作效果如何,或者您是否应该使用它,我从未尝试过。

关于android - 在API11中处理OnPreferenceChangeListener,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/23958884/

10-09 01:38