【问题标题】:Best practice: Managing android database references between fragments最佳实践:管理片段之间的 android 数据库引用
【发布时间】:2012-01-04 18:55:33
【问题描述】:

如何处理显示数据列表的片段和在后台更新数据的不同线程/类之间的引用。因此,我需要能够通过 Observer-inf 或类似的东西从片段外部强制更新。

目前我正在使用虚拟工厂类根据我的默认设置创建一个新的 SqlLiteDatabase 对象。

public static SQLiteDatabase initFor(Context context) {
    db = context.openOrCreateDatabase(NAME, SQLiteDatabase.CREATE_IF_NECESSARY, null);
    db.setLocale(Locale.getDefault());
    db.setVersion(1);
    db.setLockingEnabled(true);
    return db; }

然后我从每个片段中调用它并设置适配器,这同样适用于数据插入器线程。要关闭数据库,我会覆盖我的活动的 onDestroy() 并调用:initFor(this).close(); .

这非常难看,并且在方向更改时失败。我正在考虑 SQLiteOpenHelper,但我不知道它对我有什么帮助。

【问题讨论】:

  • 您还在为这个问题寻找解决方案吗?
  • 不是真的,但最好的实践解决方案总是受到赞赏。无论如何,我最终让我的 Activites 扩展了一个抽象类 DatabaseActivity,该类处理对 SqlLiteDatabase 的引用。我更喜欢避免使用 Singeltons。
  • 为了以后其他人的清楚,那么......当你的片段发生变化时,你是使用相同的查询和游标,还是重建它们?
  • 当片段数据发生变化时,他们会通过观察者模式得到通知,然后他们会重新查询数据库游标并使用新的适配器更新视图。
  • 我知道。 :) 我只是问你在做什么,所以我没有提供无用的答案。 (即不能解决这个问题)。

标签: android android-fragments android-lifecycle


【解决方案1】:

您应该在另一个线程(在服务中)访问您的数据库,然后与一个类(可能是您的助手)进行对话,然后通过在扩展 Application.您可以通过调用从任何片段中获取您的应用程序类

 ((YourApplication) context.getApplicationContext()).getGetDatabaseHelper();

【讨论】:

  • 这仍然是当时的解决方案,还是应该使用 Headless Fragments?
  • 您也可以使用无头片段。我现在建议使用一个 ContentProvider,它可以通过 getActivity().getContentResolver() 轻松访问
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-09-16
  • 1970-01-01
  • 2014-10-11
  • 1970-01-01
  • 2020-11-24
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多