在Android中的存储类中访问应用程序上下文

时间:2013-12-11 05:53:10

标签: android preferences

我在Android 4.0上有一款应用。它使用PreferenceManager类 - 除其他外 - 让用户指定要显示的数字的小数位数。

mPreferences = PreferenceManager.getDefaultSharedPreferences(this);

通常,获取应用程序上下文以访问Preference Manager没有问题。我的问题是我有一个类(我们称之为Record),它不是任何具有app上下文的子类;它只是一个存储类,但它确实有一个字段“NumDecPlaces”。现在,当我从我的应用程序中实例化该类时,我只是传入用户的#dec位置首选项。如果Record可以直接访问Preference管理器,那将是很好的。我想我总是可以使用指向创建它的上下文的实例来实例化Record,但是要记住这一点很多; - )

所以现在记录子类没什么。有关我可以做些什么的任何建议,以便让它看到应用程序上下文?

谢谢!

3 个答案:

答案 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类扩展了应用程序{......}