我正在使用PreferenceActivity来显示我的应用程序的一些设置。我通过一个xml文件膨胀设置,使我的onCreate(和完整的类方法)看起来像这样:
public class FooActivity extends PreferenceActivity {
@Override
public void onCreate(Bundle icicle) {
super.onCreate(icicle);
addPreferencesFromResource(R.xml.preference);
}
}
PreferenceActivity PreferenceFragment的javadoc声明
当用户与这些首选项交互时,这些首选项将自动保存到SharedPreferences。要检索这个活动中的首选项层次结构将使用的一个SharedPreferences实例,调用getDefaultSharedPreferences(android.content.Context),并在与这个活动相同的包中调用上下文。
但是我如何在另一个活动中获得SharedPreference的名称?我只能打电话
getSharedPreferences(name, mode)
在其他活动中,但我需要PreferenceActivity使用的SharedPreference的名称。什么是名称或我如何检索它?
首先声明这些方法。
public static void putPref(String key, String value, Context context) {
SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(context);
SharedPreferences.Editor editor = prefs.edit();
editor.putString(key, value);
editor.commit();
}
public static String getPref(String key, Context context) {
SharedPreferences preferences = PreferenceManager.getDefaultSharedPreferences(context);
return preferences.getString(key, null);
}
然后当你想要放置一个pref时调用这个:
putPref("myKey", "mystring", getApplicationContext());
当你想要得到一个pref时调用这个:
getPref("myKey", getApplicationContext());
或者您可以使用该对象https://github.com/kcochibili/TinyDB--Android-Shared-Preferences-Turbo
这就进一步简化了一切
例子:
TinyDB tinydb = new TinyDB(context);
tinydb.putInt("clickCount", 2);
tinydb.putFloat("xPoint", 3.6f);
tinydb.putLong("userCount", 39832L);
tinydb.putString("userName", "john");
tinydb.putBoolean("isUserMale", true);
tinydb.putList("MyUsers", mUsersArray);
tinydb.putImagePNG("DropBox/WorkImages", "MeAtlunch.png", lunchBitmap);
到处传递上下文真的让我很恼火。代码变得过于冗长且难以管理。相反,我在每个项目中都这样做……
public class global {
public static Activity globalContext = null;
并将其设置在主活动create中
@Override
public void onCreate(Bundle savedInstanceState) {
Thread.setDefaultUncaughtExceptionHandler(new CustomExceptionHandler(
global.sdcardPath,
""));
super.onCreate(savedInstanceState);
//Start
//Debug.startMethodTracing("appname.Trace1");
global.globalContext = this;
此外,所有的首选键都应该是语言独立的,我很惊讶居然没有人提到这一点。
getText(R.string.yourPrefKeyName).toString()
现在在一行代码中像这样简单地调用它
global.globalContext.getSharedPreferences(global.APPNAME_PREF, global.MODE_PRIVATE).getBoolean("isMetric", true);
如果你不能访问getdefaultsharedpreferences(),你可以使用getSharedPreferences(name, mode),你只需要传入正确的名称。
Android创建这个名称(可能是基于你的项目的包名?)您可以通过将以下代码放在SettingsActivity onCreate()中,并查看preferencesName是什么来获得它。
String preferencesName = this.getPreferenceManager().getSharedPreferencesName();
字符串应该是com.example.projectname_preferences之类的东西。在项目的某个地方硬编码,并将其传递给getSharedPreferences(),这样就可以了。