问题标签 [android-cursorloader]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
739 浏览

android - Android CursorAdapter 在首次加载时不刷新

编辑我没有添加我的 XML

我正在编写一个用于标记选择的对话框。第一个视图是应用他们在数据库中的标签。下一个屏幕是一个对话框,用于将新标签添加到他们的数据库中。我正在为他们提供用于标签的建议。我想在他们开始输入标签时过滤列表。我为每个屏幕使用两个自定义 CursorAdapter,但它们共享相同的 ListView。我还在使用 CursorLoader 在后台运行我的查询,两者都是从支持库扩展而来的。

当我第一次打开新标签屏幕时,对话框出现后,列表不会用 Android 4.0.3 中的过滤光标刷新,快速滚动也不起作用。如果我切换到标签视图,然后返回到新标签对话框,它会按应有的方式过滤和滚动。我的查询有效,代码每次都在 Android 2.3.3 中有效。我不知道为什么这不起作用。这是我的 CursorLoader 和 Suggestion 适配器的代码。

在此先感谢您的帮助。

XML

0 投票
1 回答
2020 浏览

android - 对 CursorLoaders 感到困惑,并将它们与自定义 SQLiteOpenHelper 一起使用

我正在编写一个应用程序,允许人们为他们需要执行的各种任务设置警报。我目前的计划是将所有相关数据存储到 SQLite 数据库中。为此,我创建了一个扩展 SQLiteOpenHelper 的类,并在其中填充了处理我期望必须接受的所有 CRUD 的方法。知道在一个线程上进行所有处理通常是一个坏主意,我查找了在线程之间分离工作的方法,并找到了 CursorLoader 和 LoaderManager,这似乎很理想,因为它们在 Android 兼容库中可用。但是,LoaderManager 似乎需要按照文档中的教程进行的 ContentProvider,并且我还没有真正看到需要对 ContentProviders 做任何事情,因为我不打算允许其他应用程序访问数据。如果没有 ContentProvider,我不知道我应该如何为我的数据库获取一个 Uri 以输入 CursorLoader。有没有办法让我继续使用扩展 SQLiteOpenHelper 的类并仍然实现 LoaderManager 以允许我将所有填充的 ListFragments 与我的光标保持在 UI 线程之外?

0 投票
2 回答
997 浏览

android - CursorLoaders and AsyncTaskLoaders using same LoaderManager

I have a fragment that uses multiple CursorLoaders. All works fine. Now I need to add an AsyncTaskLoader as well, to the same fragment.

Question is, how can I use the same LoaderManager.LoaderCallbacks interface to manage both my CursorLoaders and AsyncTaskLoader?

My thought is that since CursorLoader is-a AsyncTaskLoader, then I should be able to adapt the LoaderCallBacks to both, but I may be miss the boat...

0 投票
1 回答
1115 浏览

android - 重新启动 CursorLoader 不反映数据库删除

我正在使用 CursorLoader 来跟踪数据库中的数据。可以使用删除此数据库

删除后我重新启动加载器

现在当我收到回调

它并不反映数据已经消失。我得到与以前相同的数据。

我在做一些概念上的错误吗?

0 投票
0 回答
494 浏览

android - 如何将 listview 自定义 cursoradapter 转换为 Android 3.0 及更高版本?

相当noobish和我在这里的第一篇文章。我有一个在 2.3.3 中运行良好的应用程序,它使用自定义 baseadapter 填充列表视图。问题是我正在使用 Android 3/4 中已弃用的 startManagingCursor 和 requery。

我正在使用 sqlite 和一个数据库适配器,它包含我的所有查询和一个私有方法来从活动传递参数。您可以通过长按某个项目或单击某个项目以在新活动中打开它并在您成功返回列表更新时更新列表。

我知道我们不应该在主 UI 上运行这些类型的操作,但我无法弄清楚 cursorloader 并且我什至需要它吗?我是否应该使用 asynctask 之类的其他东西在不同的线程上运行。我只是不明白这一切是如何结合在一起的,任何朝着正确方向的帮助将不胜感激。谢谢。

这是我认为最相关的代码来自 MyActivity 的一个小样本

和 CursorAdapter

================ 编辑==================

我最终删除了 startManagingCursor() 和 requery() 并从兼容性包中添加了 import android.support.v4.widget.CursorAdapter 。由于我从不同位置多次调用,我创建了一个私有 Cursor mCursor 并使用 this.mCursorAdapter.changeCursor(mCursor) 来更新它。

现在这几乎可以工作,除了:

  1. 你真的不应该这样做,因为它仍然在主 UI 上运行
  2. 关闭光标取决于应用程序的设置方式

就我而言,我无法关闭光标,否则我的列表视图将为空。在 onDestroy() 中关闭它不能保证运行,并且在 onBackPressed() 中关闭它不起作用,因为您可以单击一个列表项,该列表项使用新光标打开一个新活动。当有人单击列表项然后单击后退按钮时,列表应该在同一个位置,因此关闭 onStop()(并在 onStart() 中打开)也不是答案。我也在所有活动中尝试了一个公共静态游标,但这也有问题。我没有尝试的另一件事是将光标信息立即加载到内存中,然后立即关闭它,但这似乎不太理想。

我真的很喜欢 CursorLoader 的想法,除了它只接受一个 URI 并且你需要一个内容提供者并且它不接受 rawQuery()。我的数据库中有数千个项目,并且使用我的数据库适配器进行了一百个不同类型的查询调用,而重新更改所有这些似乎是一件很痛苦的事情。我认为 CursorLoader 是最好的方法,但我对 android 实现它的方式感到失望。

我还看到有人写的没有 ContentProvider 的 CursorLoader使用 AsyncTaskLoader,因此您不需要 ContentProvider。这可能是我现在最好的选择,但其他人指出没有刷新数据更改的机制。我将不得不调查一下。

0 投票
1 回答
1239 浏览

android - How do I wait for two cursorloaders to return with data before starting third dependent on the return data?

I have an android app using fragments and a content provider to access my local sqlite database. The Listviews often depend on several database queries such that their display is based on the query results. Assuming I have three cursorloaders, how do I ensure loader 1 and 2 have both completed before running loader 3?

0 投票
1 回答
4837 浏览

android - 使用 LoaderManager 和 CursorLoader 在列表视图中显示专辑和艺术家

我有一个ListFragment谁的列表应该显示设备的专辑和使用的相关艺术家MediaStore。因此,每行有两个TextViews. 我正在使用LoaderManagerCursorLoader使用自定义 CursorAdapter 来填充列表,以便将TextViews行的绑定到数据。

列表片段代码:

AlbumsAdapter(自定义 CursorAdapter)代码:

目前,当我显示这个 ListFragment 时,我有一个 java.lang.NullPointerException,这里是 logCat:

您能否帮我更正我的代码,以便将专辑和相关艺术家显示在列表视图中?

问题解决了 :

对于任何尝试使用 LoaderManager/CursorLoader 技术填充自定义列表视图的人来说,您应该:

1)创建您自己的自定义 CursorAdapter,它将您的行的 TextViews 绑定到光标的数据(请参阅我上面的自定义 CursorAdapter)

2)然后,在您的片段中,这是要做什么:

就是这样!我不知道为什么没有人购买过这样一个关于如何使用 LoaderManager、CursorLoader 和自定义适配器来填充自定义列表视图的非常简单的示例。无论如何,我希望这对将来像我这样的初学者有所帮助。

0 投票
1 回答
9919 浏览

android - 显示来自 MediaStore.Audio.Albums.ALBUM_ART 的专辑封面

我在带有自定义 CursorAdapter 的 LoaderManager 中使用 CursorLoader。我已经实现了显示专辑和相关的艺术家,现在我想显示封面。

这是我的自定义 CursorAdapter :

我尝试了以下但没有成功:

MediaStore.Audio.Albums.ALBUM_ART 返回什么以及如何使用它来使 ImageView 脱离封面?谢谢。

0 投票
1 回答
885 浏览

android - IntentService 和 CursorLoader 同步问题

我正在构建一个遵循IOSched检索数据方式的应用程序,除了我认为我会使用CursorLoader而不是ContentObserver

我也一直在参考 Reto 的android-protips-location它确实使用CursorLoader并且逻辑流程与 IOSched 非常相似,因此:

initLoader → startService (serviceIntent) → handleIntent → insert into DB → notifyChange → onLoadFinished → update UI

我期望看到的是在数据库上执行一次后CursorLoader返回 a 。Cursorinsert

目前,片段onActivityCreated调用initLoader并运行查询ContentProviderthis 返回该Cursor时间点的当前数据。但是,当我执行刷新时似乎onLoadFinished没有被触发。日志显示deleteinsertContentProvider执行时执行,但查看日志显示notifyChange在插入时调度。

0 投票
1 回答
8893 浏览

android - 使用 CursorLoader 查询专辑的歌曲

我想通过查询MediaStorewith来获取专辑的歌曲列表CursorLoader

我怎样才能做到这一点 ?我可以使用以下代码获取设备的所有歌曲:

我应该在代码中添加什么或修改以过滤特定专辑的歌曲?