有没有办法在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;
}
});
}
}
答案 0 :(得分: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 Preference
或extend CheckboxPreference
并推出自己的解决方案。这实际上可能是最好的解决方案,因为它的优点是能够将两个版本包装在一个类中,然后您可以支持您的首选实现,确保您想要使用的方法公开并且不会失败,无需手动版本检查在您使用首选项的任何地方输入类型。
在进行一些搜索时,我偶然发现了你可能会使用的this library。它旨在支持SwitchPreference。我不能说它的效果如何,或者如果你应该使用它,我从未尝试过。