Eth*_*len 12 java android android-preferences
有没有办法让SharedPreferences在我的整个应用程序中全局化?现在我在我的代码中的很多地方使用这些行来存储我的用户可以设置的许多首选项的简单开/关设置.如果可能的话,我只想在全球范围内召集一次:
SharedPreferences settings = getSharedPreferences("prefs", 0);
SharedPreferences.Editor editor = settings.edit();
Run Code Online (Sandbox Code Playgroud)
关于如何在所有类中调用这些行的任何提示都会很棒:
editor.putString("examplesetting", "off");
editor.commit();
Run Code Online (Sandbox Code Playgroud)
和
String checkedSetting = settings.getString("examplesetting", "");
Run Code Online (Sandbox Code Playgroud)
t0m*_*13b 15
我知道,我知道,我会被发炎,并被铸入地狱的余烬......
使用包围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);
}
}
Run Code Online (Sandbox Code Playgroud)
并围绕您的示例在问题中表示的内容创建包装函数,例如,
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();
}
Run Code Online (Sandbox Code Playgroud)
从您的第一个活动开始,以这种方式激活单例类,如下所示:
PrefSingleton.getInstance().Initialize(getApplicationContext());
Run Code Online (Sandbox Code Playgroud)
我冒险投票的原因是,使用全局静态类可能是一个坏主意,并违背编程基础的做法.但是,除此之外,它还将确保只有该类的唯一对象PrefSingleton才能存在并且无论代码处于何种活动状态,都可以访问它.
gob*_*dor 10
我会扩展Application并包含SharedPreferences.Editor带有吸气剂的字段.
public class APP extends Application {
private final SharedPreferences settings = getSharedPreferences("prefs", 0);
private final SharedPreferences.Editor editor = settings.edit();
public SharedPreferences.Editor editSharePrefs() {
return editor;
}
}
Run Code Online (Sandbox Code Playgroud)
然后你可以从任何访问它Activity与
((APP) getApplication()).editSharePrefs().putString("examplesetting", "off");
((APP) getApplication()).editsharePrefs().commit();
Run Code Online (Sandbox Code Playgroud)
或者,您也可以使用该方法
public static APP getAPP(Context context) {
return (APP) context.getApplicationContext();
}
Run Code Online (Sandbox Code Playgroud)
虽然,这只会改变你所做的电话
APP.getAPP(this).editSharePrefs().putString("examplesetting", "off");
APP.getAPP(this).editsharePrefs().commit();
Run Code Online (Sandbox Code Playgroud)
所以这真的是个人偏好,对你来说看起来更干净.
| 归档时间: |
|
| 查看次数: |
14904 次 |
| 最近记录: |