我正在使用处理首选项的Androids built in way,它通过在xml文件中写入所有设置来工作。这非常好,但是如果不在xml和Java代码中使用魔术字符串,我找不到任何好的方法。
我能想到的唯一方法是将首选项密钥保存为String,但这也感觉不对。有没有人有办法解决这个问题?
答案 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>
...
然后,您可以引用Activity
或PreferenceActivity
:
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看看共享偏好。