【问题标题】:SQLite initialization on Fragment片段上的 SQLite 初始化
【发布时间】:2014-02-17 20:46:17
【问题描述】:

我刚刚阅读了Using context in a fragment,因为我需要获取上下文才能初始化数据库。使用Fragment#getActivity() 获取Context 或在Fragment#onAttach(Activity) 回调方法中执行此操作的2 个投票最多的答案。

问题是,为了维护一个有据可查的代码,我想避免以“替代”方式做事,而是按照应有的方式去做。

根据此处的Fragment 生命周期判断:http://developer.android.com/guide/components/fragments.html#Creating 似乎在onCreate 之前调用了onAttach(),这意味着getActivity() 此时不应返回null

问题是:

  1. 是不是要在onAttach()里面初始化一个数据库?
  2. 即使onAttach() 已经被调用,getActivity()onCreate() 内部调用时是否可以返回null

【问题讨论】:

  • 你解决了吗?您是否有更好的答案可以添加,或者您可以接受另一个以关闭此问题并将其从未回答的 android 列表中删除,谢谢!
  • 是的,我最终将我的数据库设为Singletοn,因此ViewPager 中的每个片段都将具有相同的连接。然后我在我的Application#onCreate() 子类上初​​始化它
  • 您可以回答自己的问题 - 您应该只是整理未回答的列表

标签: android sqlite android-fragments


【解决方案1】:

您最好创建一个ContentProvider 以便在正确的时间进行设置。这使您可以通过内容解析器从任何地方轻松访问数据库。

【讨论】:

  • +1 因为我喜欢使用 CP ...附加值也将是:CP 与 Loaders 兼容,通过 CP 添加数据,您不必担心 ListView 刷新 - 它会完成自动:)
  • 创建 ContentProvider 可能是一件不必要的苦差事。问题是关于 Context 而不是 ContentProvider。
【解决方案2】:

要初始化数据库,ApplicationContext 就足够了。

您可以创建自己的应用程序子类,如下所示(您还必须在清单中定义它)

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

【讨论】:

  • 我真的不明白你为什么要这么做。从Application 实例中调用getApplicationContext() 与使用this 基本相同。
  • @Squonk 我可以在不从 Activity 调用时使用这种方式,我可以在任何类中使用它。或者你的意思是getApplicationContext和Application.this一样。没想到,getApplicationContext() 好像更明确了。
  • 很多地方都需要 Activity 上下文,所以 App Context 没有用处。即使忽略这一点,创建一个静态方法来做事也违背了 OO 原则,正如 Squank 所提到的,getApplicationContext() 存在
  • @Nick Cardoso 请您详细说明它是如何违反 OO 原则的?
  • @Alex :(继续,空间不足)。另外,正如尼克建议的那样,在某些情况下您必须使用活动上下文(尽管正如您在回答中所说的那样,应用程序上下文对于数据库的东西来说很好)。您可能需要一个 Activity 上下文的原因是应用程序上下文只是一个部分上下文,并且根本不适用于许多与 UI 相关的任务(应用程序没有 UI,也不知道 UI 需要什么)。
猜你喜欢
  • 1970-01-01
  • 2022-08-23
  • 2021-01-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-08-19
  • 1970-01-01
相关资源
最近更新 更多