问题标签 [android-loader]

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 回答
851 浏览

android - 使用动态加载器在没有 ListFragments 的 ViewPager 中加载 ListView 页面的模式?

如果我有ViewPager一定数量的页面,那么使用Loader框架为每个页面加载数据的最佳方式是什么?每个页面都包含一个具有自己的适配器实例的 ListView。

  1. 为每个页面使用单独的加载器;或者
  2. 使用单个加载器来检查哪些页面未加载并加载它们

问题是,用户可能希望快速浏览一堆页面,因此应该很容易“取消”加载出于性能原因不需要的页面。

另一方面,似乎有很多加载程序可能会产生开销。

编辑:Loader的 s 实际上需要有动态 ID 来表示它们正在加载的内容。我可能会在加载程序 ID 上使用掩码,然后在加载程序完成后调用destroyLoader().

0 投票
1 回答
6437 浏览

android - 如何从使用 ViewPager 的 FragmentActivity 重新启动 ListFragment 中的 Loader?

我有一个ViewPager FragmentActivity包含 3 个选项卡的选项卡,每个选项卡ListFragment都有一个加载器。在这个活动的初始化中,所有的加载器都加载了,到目前为止一切都很好。

refresh()我在片段中实现了一个公共方法来重新启动加载器:getLoaderManager().restartLoader(0, null, this);

当我从它抛出的父活动中调用它时illegalStateException Fragment not attached to Activity。任何想法如何重新启动加载程序?

编辑:

我的活动扩展SherlockFragmentActicity,其中我有一个适配器,可以扩展FragmentPagerAdapter以管理寻呼机中的选项卡。

现在标签片段是:

0 投票
1 回答
764 浏览

android - 使用 Loader API 时 FragmentStatePagerAdapter 未设置 UI 元素

所以我现在在尝试将 FragmentStatePagerAdapter 与 Loader API 一起使用时遇到了这个问题,但在 UI 中没有设置任何值我的意思是当 onLoadFinished() 完成并将值设置为 TextView、ImageView 和 changeCursor 到我的适配器时没有反映它,我看到了我在 XML 中设置的 UI。

让我们看看我是否可以清楚地解释这个问题。

我有一个列表,当一个项目被点击时,你会看到这个的详细视图。当一个项目被选中时,两个元素被发送到细节,ids 数组和被选中项目的位置。

因此,在 DetailActivity 中有一个 ViewPager,它有一个 FragmentStatePagerAdapter,它使用 id 和位置来加载正确的数据。

并且 DetailPagerAdapter 覆盖 getItem 和 getCount (返回 ids.length)

现在在 DetailFragment 中 newInstance 执行此操作

公共静态 DetailFragment newInstance(long id) { DetailFragment f = new DetailFragment();

当 onLoadFinished 被调用时。

0 投票
2 回答
4263 浏览

android - Android Loader 不会在屏幕旋转时触发回调

我正在使用一个AsyncTaskLoader. 我有一个已经实现的活动LoaderCallbacks(支持库)。

我已调试断点并放入日志,加载程序提供结果,但是第二次onLoadFinished未触发回调。奇怪的是 - 当我再次旋转时它起作用了,当我回到它时,我开始的任何方向都会得到回调。

在我的活动中onResume

在我的装载机中:

对此真的感到困惑,我是Android新手,所以也许这对其他人来说很明显:)

0 投票
3 回答
2702 浏览

java - 如何实现一个简单的 AsyncTaskLoader?

在我最近的一个 SO 问题中,有人建议我使用Loader我的解决方案。所以在这里我试图了解如何实现一个简单的AsyncTaskLoader

这是我想出的:

这就是我想出来的。我阅读了文档,AyncTaskLoader但我从未遇到过像它这样神秘和凌乱的东西。有一百万种方法,所有这些方法都是相互对立的,看着它们,很难推断出它们被调用的顺序,甚至它们是否应该被覆盖和调用。这项任务的生命周期是一场该死的噩梦。

我正在寻找的是简单地抓取一些数据并将其返回。我还想将它存储在一个类变量中,以便下次及时返回它,而不必再次抓取所有数据。

我没有打开的游标、流或类似的东西,只有一个名为lstEvents(可能很大)的简单变量。我不想泄漏内存和浪费资源,所以如果有人能解释我需要什么来关闭/取消何时何地让这个任务工作,我会很高兴。

我应该在哪里将数据存储到类变量中?我应该在我的loadInBackground方法结束时这样做还是应该在deliverResult方法中这样做?

在这个简单的场景中,我是否真的需要检查任务是否被取消或是否被重置,或者我是否应该简单地不覆盖这些方法并让AsyncTaskLoader处理它。

如果有人知道,一些脚手架代码会很有帮助。万分感谢。

0 投票
1 回答
1763 浏览

android - 自定义光标适配器、自定义视图和光标加载器

是否可以将光标加载器与自定义视图(不是列表视图)一起使用?

下面是一个带有列表视图的自定义光标适配器的示例:

我想填充自定义视图而不是列表视图。光标将带回一条记录,该记录将填充视图。

我该怎么做?

0 投票
2 回答
202 浏览

java - 长时间不活动后无法创建新的加载器

我有一个 Android 应用程序,其Fragment依赖加载程序来获取数据。下面是我的骨架代码Fragment。一切都是一样的,只是我在onLoadFinished方法中有一些自定义代码。

Fragment在一个FragmentActivitywhich uses ViewPagerwhich uses which get its Fragment´s using aFragmentPagerAdapter`中使用。

这很好用,我可以Fragment像上面显示的那样在 s 之间进行分页。每次Fragment向 中添加新的时ViewPager,该onCreate方法都会触发并创建一个新的Loader.

当我按下手机上的“主页”按钮时,应用程序会暂停并进入后台。我总是可以恢复应用程序,它工作得很好——在后台运行 5/10/20 分钟后。

...但是如果我将应用程序留在后台很长时间,一个小时或更长时间,应用程序会在启动时崩溃,并且堆栈跟踪指向onCreate方法中的以下行:

现在我很迷茫为什么会这样。似乎Android框架在后台长时间不活动后破坏了后台的某些东西,并且该initLoader方法无法创建Loader. 关于该initLoader方法的文档具体说:

确保加载程序已初始化并处于活动状态。如果加载器尚不存在,则创建一个并(如果活动/片段当前已启动)启动加载器。否则,最后创建的加载器将被重新使用。

谁能指出我在这里做错了什么?这似乎是一个很难调试的问题,因为我无法随意复制它。这是非常随机的。谢谢


来自 logcat 的堆栈跟踪:

0 投票
0 回答
320 浏览

android - 自定义 AsyncTaskLoader 类不支持对 forceLoad 的调用

这是一个有点奇怪的问题。我正在使用一个扩展 AsyncTaskLoader 的类(真正的交易目标 API 级别 11,而不是兼容性)来接收另一个应用程序组件发送的意图,并通过从本地数据库下载一些数据来响应。我在主要活动的 onStart 方法中使用 LoaderManager 初始化加载程序。

首次启动时,加载程序工作正常。以下是发生的一系列事件: Activity.onCreateLoader - Loader 构造函数 - Loader.onStartLoading - Loader.loadInBackground - Activity.onLoadFinished - Loader.deliverResult

但是,当我退出活动并反复重新启动它时,最终它将按预期停止工作。这将是顺序:Activity.onCreateLoader - Loader 构造函数 - Loader.onStartLoading - 无

在 Loader.onStartLoading 中有一个对 forceLoad 的调用,但在后一种情况下,它似乎没有做任何事情。我搜索过的所有地方似乎都说调用 forceLoad 是一种让加载程序开始执行其工作的近乎防弹的方法,但我一直遇到它根本什么都不做的情况。加载程序的属性在每种情况下都是相同的(isStarted、isAbandoned 和 isReset 无论如何都会给出相同的结果)。坦率地说,我没有发现加载器在工作正常的情况和不加载任何内容的情况之间有什么不同。

0 投票
1 回答
908 浏览

android - 从另一个片段访问在一个片段中创建的加载器

我有一个具有相当标准片段布局的应用程序。左侧的可扩展列表视图片段和右侧的面板用于不同的事情,具体取决于用户选择对左侧列表执行的操作(显示数据、添加新数据等)。

我将 LoaderManager(第一次使用加载器)与 CommonWare 的loaderex库一起使用,因为我不需要或不希望为我的数据库创建内容提供程序,这样我就可以使用标准的 CursorLoader。此设置非常适合显示我的列表。

我遇到的问题是当我使用第二个片段将数据添加到数据库时。我无法弄清楚如何在第一个片段中触发重新加载列表。对于我的一生,我无法弄清楚如何从第二个片段的第一个片段中获取加载器,以便它知道需要再次提取数据,我似乎也无法弄清楚如何手动触发重新加载.

由于这是我第一次尝试使用 Loaders,如果我做的不正确,我很乐意(温和地)重新引导到更好的道路上。

片段 1

片段 2

0 投票
1 回答
2383 浏览

android - 在android中通过Loaders插入记录

这个问题将是Content Resolver vs Cursor Loader的后续问题, 其中答案清楚地说明了如何使用 Content Resolver 将记录插入到 sqlite Db 中。我的问题如下:

  1. 我可以使用加载器(普通加载器)来实现这个功能吗?

例如:

这会在 Main UI 线程还是工作线程中运行功能。我知道我不会收到回调,因为内容解析器将返回一个 URI 而不是包含数据的游标。

我尝试运行此代码,但它的行为有点奇怪.. 重复插入被记录并且它不一致,有人可以向我展示一些使用加载器进行插入操作的正确资源(我已经看到了许多带有查询示例的示例并且它有效像一个魅力:))

感谢您的时间 。