问题标签 [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.
android - LoaderCallbacks 旋转后丢失
每次使用加载器时都会遇到这个问题。如果我启动我的AsyncTaskLoader
然后旋转屏幕(没关系一次或几次)onLoaderFinished()
不会被调用。loadInBackground()
完成它的工作但onLoaderFinished()
没有被调用。似乎错过了回调,但在活动中onCreate()
我有:
回调由活动或字段实现无关紧要。就我而言,我使用字段:
有时它工作得很好,但在某些设备上我又遇到了这个麻烦。
我在 Android 错误跟踪器中进行了搜索,但没有发现任何有用的信息。
这是我的错误吗?我该如何纠正?
编辑:
android - 列表项在 onLoadFinished 后不显示
我被困在以下场景中。
我的活动实现了 2 个选项卡和一个 pageradapter,上面有 2 个片段,并且出于兼容性目的,我正在使用 ActionBarSherlock。
有问题的片段从 SherlockListFragment 扩展并实现LoaderManager.LoaderCallbacks。
我创建了一个自定义 ArrayListAdapter和一个扩展 AsyncLoader 的自定义 Loader。
问题是当加载器完成加载它的任务时,列表视图没有刷新,它只显示一个空白页。
我遵循了这个解决方案,但它并没有解决我的问题。
这是我的片段布局 xml 文件。
这是自定义加载器代码
最后这是片段类
android - 在一个 Activity 中使用不同的(AsyncTask)加载器
我想在我的 Activity 中使用不同的 AsyncTaskLoaders(它们的返回类型不同),实现回调方法的最佳方法是什么?
这不起作用:
公共类 MyActivity 扩展 Activity 实现 LoaderManager.LoaderCallbacks<MyPojo>、LoaderManager.LoaderCallbacks<MyOtherPojo>
日食 说
那我该怎么办?我的想法是制作活动
实现 LoaderManager.LoaderCallbacks<Object>
然后在回调方法中检查它是什么类型的对象,但这似乎不太优雅。有没有更好的办法?
android - 是否仍然建议使用 AsyncTask 在后台加载 listView 项目?
背景
我听说有一些在后台加载数据的新解决方案比 AsyncTask 更推荐(如loaders)。
问题
AsyncTask 非常好用且易于使用。但是,它有一些限制:
类本身必须修改,因为它受到待处理任务数量(大约 256 个左右)的限制。当然,在 listView 的适配器中,如果不需要任务,我总是会取消它(例如,当我需要更新用于不同项目的视图时)。
当重新创建活动/片段时,我还必须全部取消它们(或以不同的方式处理)。
由于 1&2,我需要管理它们并参考它们
AsyncTask 使用任务队列,有时我需要使用堆栈来代替,因此我必须创建自己的 AsyncTask 类来代替使用堆栈。
问题
AsyncTask 有替代方案吗?
我知道这在之前的一些帖子中被问过(比如这里),但我在想是否有一种新的通用方法可以在后台加载数据来取代 asyncTask。
关于加载器,我认为他们的想法是它们用于数据库和 contentProviders,但它们也可以用于加载(例如)来自 Internet 的数据(如图像文件)吗?
还有一个由 google 制作的很好的示例(这里称为“bitmapFun”),根据我所看到的使用 AsyncTask (甚至扩展它,可能是因为我提到的相同原因)。但也许我也错过了一些东西?
android - 加载器将结果传递给错误的片段
我有一个使用 ActionBar 选项卡滑动选项卡的活动,基于android 开发人员示例。
每个选项卡显示一个 Fragment,每个 Fragment(实际上是一个 SherlockFragment)通过自定义 AsyncTaskLoader 加载不同类型的远程 api 请求。
问题是,如果您在要离开的选项卡的片段(旧片段)正在加载结果时点击一个选项卡以移动 2 个选项卡/页面,则该结果将传递到您移动到的选项卡的片段(新片段)。就我而言,这会导致 ClassCastException,因为预期的结果是不兼容的类型。
在代码中,情况的要点是:
装载机:
片段:
标签管理代码如上例所示。在 Foo 和 Bar 选项卡之间有第三个选项卡(称为 Baz)。当我们在 FooFragment 在其 LoaderManager 上调用 initLoader 之后但在调用 FooFragment.onLoadFinished 之前通过点击 Bar 选项卡从 Foo 选项卡跳到 Bar 选项卡时,我们最终会在调用 BarFragment.onLoadFinished 时出现 ClassCastException:
为什么会发生这种情况,如何预防?从调试日志中可以看出,Bar 片段中正在重复使用相同的 LoaderManager(尽管 Baz 片段有自己的),但我不知道为什么会发生这种情况。
更新:在每个片段中使用不同的加载程序 ID 确实消除了崩溃(或者似乎 - 我真的不知道为什么)但我宁愿不这样做。在其中一个片段中,我实际上是动态创建 ID,并且不想假设不会发生冲突。另外,这个解决方案对我来说很奇怪——加载器 ID 应该是每个片段的本地(否则,为什么在正常情况下我可以在不同的片段中拥有具有相同 ID 的加载器?)
看来我也可以通过调用setOffscreenPageLimit(2)
ViewPager 来消除崩溃,这样当我们切换到 Bar 视图时,Foo 视图不会被丢弃。但这是一种解决方法,而不是通用解决方案。
完整代码:我创建了一个演示错误的示例应用程序。它包含一个用于强制错误的 monkeyrunner 脚本(尽管它可能不适用于所有屏幕尺寸)。
android - 自定义加载器 - 当片段从后台堆栈返回时调用 onStartLoading()
我使用 ViewPager 和 FragmentStatePageAdapter 显示搜索结果,每组结果都在自己的片段中。使用自定义 AsyncTaskLoader 加载数据。我想在进入其他活动/背景并返回时保留滚动位置。
然而,在导航到另一个活动并返回时,加载器管理器调用加载器的 onStartLoading() 并不必要地重新加载数据:
这也意味着我无法恢复滚动位置(保存在片段的保存时)。有什么方法可以避免在片段的 onResume 上重新加载?我只在 onActivityCreated() 中调用 initLoader(),当从 backstack 中恢复片段时不会调用它。
我正在使用 v4 兼容性库。
谢谢!
android - 在方向更改时 LoaderManager 调用 onLoadFinished 但未设置列表
我一直在学习 Android 加载器,并试图用 AsyncTaskLoader 实现一个。
我一直非常成功,因此这让这更加烦人:P
我的 onLoadFinished 函数如下:
我的片段中的 set_result 函数如下:
我已经使用 LoaderManager 调试器检查加载程序是否被保留.. 它是。我已经使用控制台日志从 set_result 函数中输出我的数据 - 每次方向变化时数据都在那里。 IE 一切都被调用,一切都按照建议传递 YET set_adapter 仅在第一次将数据设置到列表中, no 当它作为保留加载器的结果被调用时。
为什么?:PI 很困惑。
谢谢
android - Android - 未调用 onLoadFinished
我遇到了加载器的问题。
我有一个活动,它显示从本地数据库检索到的记录列表。当活动开始时,记录会通过 LoaderManager.initLoader() 方法自动加载。
也可以通过 ActionBarSherlock 中的刷新按钮手动刷新列表。但是,在完成另一个向 DB 添加记录的活动后,不会调用 onLoadFinished。
我正在使用SimpleCursorLoader,这是活动的代码片段:
问题是在完成其他活动后,onLoaderCreate
被调用,但onLoaderFinished
未被调用。
经过一些调试,我发现它SimpleCursorAdapter.deliverResults()
也被称为,bud 最终出现在.. if (isReset()) { ..
我错过了什么吗?如何强制重新加载数据?
先感谢您
android - 调用 onLoadFinished 慢
我正在使用Loader
并Content Provider
用我的数据库中的数据填充列表视图。我的问题是,如果我使用下面的行Content Provider
从数据库中获取数据,查询并onLoadFinished
执行得非常快(填充列表视图没有问题):
但是,如果我将行更改为:
查询继续快速运行,但应用程序需要大约 2 秒来调用onLoadFinished
和填充列表视图。
如果游标已经执行查询,为什么会出现这种延迟?
我的装载机:
我的内容提供者(查询功能):
我的 DBAdapter(getGroup 函数):
谢谢你
android - 在使用 CursorLoader 填充列表视图之前显示进度指示器
当我的列表视图没有填充数据库数据时,有什么更好的方法来显示进度指示器?
我找到了一些如何使用 assynctask 执行此操作的示例,但就我而言,我使用的是Loader
/ CursorLoader
。
一个可能的解决方案是创建一个扩展ListFragment
并使用该setListShown()
方法的新类,但我不知道这是否是解决此问题的最佳方法。
谢谢