处理没有魔术字符串的Android偏好

时间:2011-05-17 06:27:52

标签: android

我正在使用处理首选项的Androids built in way,它通过在xml文件中写入所有设置来工作。这非常好,但是如果不在xml和Java代码中使用魔术字符串,我找不到任何好的方法。

我能想到的唯一方法是将首选项密钥保存为String,但这也感觉不对。有没有人有办法解决这个问题?

2 个答案:

答案 0 :(得分:17)

您可以将“魔术字符串”移动到字符串资源:

在您的首选项xml文件中:

<EditTextPreference
        android:key="@string/preferences_pdn_key"
        android:title="@string/preferences_pdn_title"
        android:summary="@string/preferences_pdn_summary"
        android:dialogMessage="@string/input_pdn_message" />

values/strings.xml个文件中:

...
<string name="preferences_pdn_key">pdn</string>
...

然后,您可以引用ActivityPreferenceActivity

中的偏好设置
SharedPreferences sharedPreferences = PreferenceManager.getDefaultSharedPreferences(this);
String pdnKey = getString(R.string.prefernece_pdn_key);
String pdn = sharedPreferences.getString(pdnKey, null);

如果你不喜欢从字符串资源中获取偏好键,那么你可以做另一个技巧:

public class PreferenceNames {

    /* categories */ 
    public static final String LoginCategory = MyApplication.getResourceString(R.string.preferences_login_category_key);
    ...

    /* preferences */   
    public static final String Pdn = MyApplication.getResourceString(R.string.preferences_pdn_key);
    ...
}

所以你现在可以在下一个方面引用你的偏好键:

SharedPreferences sharedPreferences = PreferenceManager.getDefaultSharedPreferences(this);
String pdn = sharedPreferences.getString(PreferenceNames.Pdn, null);

以下是您的MyApplication课程的样子:

public class MyApplication extends Application {    
    private static VvmApplication s_instance;

    public MyApplication(){
        s_instance = this;
    }

    public static Context getContext(){
        return s_instance;
    }

    public static String getResourceString(int resId){
        return getContext().getString(resId);       
    }
}

另外,您需要在AndroidManifest.xml添加下一个内容:

<application android:name="com.mypackage.application.MyApplication" ... >
...
</application>

答案 1 :(得分:0)

我认为你所寻找的是[这里] [1]

[1]:http://developer.android.com/guide/topics/data/data-storage.html看看共享偏好。