Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/189.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 在API11中处理PreferenceChangeListener_Android_Android Preferences_Android Settings - Fatal编程技术网

Android 在API11中处理PreferenceChangeListener

Android 在API11中处理PreferenceChangeListener,android,android-preferences,android-settings,Android,Android Preferences,Android Settings,在API11中是否有处理OnPreferenceChangeListener的方法。只需调用Preference.setOnPreferenceChangeListener就会抛出一个lint错误,说明它需要API14+,但是我的应用程序是为API11+设计的,我不想进一步限制它可以运行的设备数量 更新:我已经检查了开发文档,这应该可以从API1获得 编辑:代码 import android.os.Bundle; import android.preference.Preference; imp

在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;
            }
        });
    }
}
仅在API v14中添加(如果您的第一个想法是使用它)

如果您想继续使用SwitchPreference for 14+和support 13-您需要:

  • 创建一个文件夹
    res/xml-v14/
  • 将当前的
    首选项.xml
    与您的首选项一起使用
  • 使用另一个
    preferences.xml
    创建另一个文件夹(如果需要)
    res/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,您可以始终
扩展首选项
扩展CheckboxPreference
并推出自己的解决方案。这实际上可能是最好的解决方案,因为它的优点是能够将两个版本包装在一个类中,这样您就可以支持首选实现,确保您要使用的方法公开且不会失败,而无需在使用首选项的任何地方进行手动版本检查类型转换


在进行一些搜索时,我偶然发现您可能会使用。它的目的是提供支持。我说不出它的效果如何,或者你是否应该使用它,但我从未尝试过。

我只是做了一个测试应用程序(min API:8,target:10,然后min:13,target:14),在这两种情况下都没有问题。我们需要看一些代码来进一步排除故障。我可以给出导致问题的实际行。你还需要什么?嗯。。。您的导入可能和其他任何逻辑上与给出错误的行一起的行。但在我们走得太远之前,您使用的是什么IDE?您是否尝试过“刷新”项目、“清理”代码并重新启动IDE?有时,反复关闭它是解决方案=0pI已在中添加了我的代码。我正在使用Eclipse。是的,我试过清洁,但不起作用。我认为我发现了问题,答案已提交。谢谢。我会尝试一下,然后发回。@RobertEves92,更新,我还添加了一节关于如何处理代码中不同版本的内容。有没有办法在API14+设备上测试API13的代码?没有。你应该使用模拟器进行此类测试。我建议使用Genymotion和VirtualBox而不是默认的模拟器。设置起来也很容易,如果您想从Eclipse中启动模拟器,请确保您也获得了Eclipse附加组件。上的所有说明