Android:获取首选项键的int值

时间:2012-02-22 20:53:19

标签: android key listener switch-statement sharedpreferences

我想添加一个OnSharedPreferenceChangeListener,并根据传入的密钥进行切换

public void onSharedPreferenceChanged(SharedPreferences sharedPreferences, String key) {
switch(obtainIntFromKey(key)){
    case R.string.settings_some_propery : doSomething(); break;
    ...
}

obtainIntFromKey(key)方法看起来如何?

2 个答案:

答案 0 :(得分:0)

您可以使用当前方法执行此操作:

public void onSharedPreferenceChanged(SharedPreferences sharedPreferences, String key) {
    int value = sharedPreferences.getInt(key, 0);
    switch(value){
    case R.string.settings_some_propery : doSomething(); break;
        ...
    }
}

答案 1 :(得分:0)

您想切换的内容不正确。 OnSharedPreferenceChangeListener将传递已解析的密钥文字。不幸的是,你不能使用switch().. case语句和它传递的键(除非你在Java 7上)。由于您的首选项屏幕选项有限且您事先知道它们是什么,因此您需要检查更改时要作出反应的那些键:

public void onSharedPreferenceChanged(SharedPreferences sharedPreferences, String key){
    if(key.equals(getString(R.string.somestringresourceyoucareabout)) {
       //if you ask the user to enter an int value for this key then you need to cast it explicitly since preferences will store everything as text except for checkboxpreference
       int value = Integer.parseInt(prefs.getString(key, defaultValue));
    }
    else if(key.equals(getString(...)) {
       ...
    } 
}

如果你真的想使用switch().. case,你可能想研究使用eclipse ADT插件使用Java 7. 坦率地说,如果你正在为每个插件编写一个case语句对于你想要访问的密钥,你可以使用嵌套的if..else if条件,而不是花时间使用Java 7和ADT。