我在Android 4.0上有一款应用。它使用PreferenceManager类 - 除其他外 - 让用户指定要显示的数字的小数位数。
mPreferences = PreferenceManager.getDefaultSharedPreferences(this);
通常,获取应用程序上下文以访问Preference Manager没有问题。我的问题是我有一个类(我们称之为Record),它不是任何具有app上下文的子类;它只是一个存储类,但它确实有一个字段“NumDecPlaces”。现在,当我从我的应用程序中实例化该类时,我只是传入用户的#dec位置首选项。如果Record可以直接访问Preference管理器,那将是很好的。我想我总是可以使用指向创建它的上下文的实例来实例化Record,但是要记住这一点很多; - )
所以现在记录子类没什么。有关我可以做些什么的任何建议,以便让它看到应用程序上下文?
谢谢!
答案 0 :(得分:2)
您可以在构造函数中传递Context
对象。因此,每当您尝试使用该类时,它会要求您传递Context
对象,然后使用它来获取SharedPreferences
例如。
public Record(Context context)
{
mContext = context;
mPreferences = PreferenceManager.getDefaultSharedPreferences(mContext)
}
答案 1 :(得分:0)
您可以执行@ Apoorv的建议,也可以创建另一个专门存储应用程序上下文的类。
public class ContextResolver {
private static Context context;
public static void setContext(Context context) {
if (context == null) {
throw new IllegalArgumentException("Context must not be null");
} else if (context instanceof android.app.Activity) {
context = androidContext.getApplicationContext();
} else if (context instanceof android.content.Context) {
context = androidContext;
}
}
public Context getContext() {
return context;
}
}
现在您需要在将要启动的第一个活动中调用setContext()一次。
public class MyFirstActivity extends Activity {
public void onCreate() {
ContextResolver.setContext(this);
}
}
现在,您可以从代码的任何部分检索上下文。所以在你的Record类中你可以这样做:
mPreferences = PreferenceManager.getDefaultSharedPreferences(ContextResolver.getContext());
答案 2 :(得分:0)
您还可以使用Application扩展一个类,它将是整个应用程序的全局类,您可以将该类中的上下文设置为成员变量,并且该上下文将是整个应用程序的全局
EG。 A类扩展了应用程序{......}