1

有没有办法在 API11 中处理 OnPreferenceChangeListener。简单地调用 Preference.setOnPreferenceChangeListener 会引发一个 lint 错误,说明它需要 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;
            }
        });
    }
}
4

1 回答 1

1

android.preference.SwitchPreference仅在 API v14 中添加(以及TwoStatePreference以防您第一次使用它)

如果您想继续使用 SwitchPreference for 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滚动您自己的解决方案。这实际上可能是最好的解决方案,因为它的优点是能够将两个版本包装在一个类中,然后您可以支持您的首选实现,确保您想要使用的方法被公开并且不会失败,而无需手动版本检查在您使用首选项的任何地方键入强制转换。

在进行一些搜索时,我偶然发现了您可能会使用的这个库。它旨在支持 SwitchPreference。我无法说出它的效果如何,或者您是否应该使用它,但我从未尝试过。

于 2014-05-31T14:19:08.707 回答