我刚读了Using context in a fragment因为我需要获取一个上下文来初始化数据库。 2个投票最多的答案,使用Fragment#getActivity()
获取Context
或在Fragment#onAttach(Activity)
回调方法中执行此操作。
问题是,为了保持记录良好的代码,我想避免以“替代”的方式做事,而是按照预期的方式进行。
根据此处的Fragment
生命周期判断:http://developer.android.com/guide/components/fragments.html#Creating似乎onAttach()
之前调用了onCreate
,这意味着getActivity()
不应该此时返回null 。
问题是:
onAttach()
内的数据库?getActivity()
已被调用,null
在onCreate()
内调用时是否可以返回onAttach()
?答案 0 :(得分:1)
您似乎最好在正确的时间创建ContentProvider进行设置。这使您可以通过内容解析器轻松地从任何地方访问数据库。
答案 1 :(得分:-1)
要初始化数据库,ApplicationContext
就足够了。
您可以创建自己的Application子类,如下所示(您还必须在清单中定义它)
class MyApp extends Application {
private static Application mInstance;
public void onCreate() {
super.onCreate();
mInstance = this;
}
public static void context() { return mInstance.getApplicationContext(); }
}
然后,从您需要应用程序上下文的任何地方,您都可以致电MyApp.context()
在你的清单中:
<application android:name="MyApp"/>