有没有办法在我的整个应用程序中使SharedPreferences全局化?现在我在代码中的很多地方都使用这些行来存储用户可以设置的一些首选项的简单的开/关设置.我只想尽可能地在全球呼叫一次:
SharedPreferences settings = getSharedPreferences("prefs",0); SharedPreferences.Editor editor = settings.edit();
editor.putString("examplesetting","off"); editor.commit();
和
String checkedSetting = settings.getString("examplesetting","");
解决方法
我知道,我知道,我会发炎,并投入地狱的余烬….
使用一个包围SharedPreference设置的单例类,如下所示:
public class PrefSingleton{ private static PrefSingleton mInstance; private Context mContext; // private SharedPreferences mMyPreferences; private PrefSingleton(){ } public static PrefSingleton getInstance(){ if (mInstance == null) mInstance = new PrefSingleton(); return mInstance; } public void Initialize(Context ctxt){ mContext = ctxt; // mMyPreferences = PreferenceManager.getDefaultSharedPreferences(mContext); } }
并围绕您的示例在问题中表示的创建包装函数,例如,
PrefSingleton.getInstance().writePreference(“exampleSetting”,“off”);
并且实现可能是这样的:
// Within Singleton class public void writePreference(String key,String value){ Editor e = mMyPreference.edit(); e.putString(key,value); e.commit(); }
从你的第一个活动,激活单身班,这样的方式,像这样:
PrefSingleton.getInstance().Initialize(getApplicationContext());
我冒险投票的原因是使用全局静态类可能是一个坏主意,违反了编程基础的实践.不过说过,除了这个挑剔之外,它将确保只有PrefSingleton类中唯一的对象可以存在并且可以访问,而不管代码是什么活动.