Fragment上的SQLite初始化

时间:2014-02-17 20:46:17

标签: android sqlite android-fragments

我刚读了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

问题是:

  1. 是否意味着初始化onAttach()内的数据库?
  2. 即使getActivity()已被调用,nullonCreate()内调用时是否可以返回onAttach()

2 个答案:

答案 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"/>