Articles of android loadermanager

AsyncTaskLoader onLoadFinished有待处理的任务和配置更改

我正在尝试使用AsyncTaskLoader在后台加载数据以填充详细信息视图以响应所选的列表项。 我得到它主要工作,但我仍然有一个问题。 如果我在列表中选择第二个项目,然后在第一个选定项目的加载完成之前旋转设备,则onLoadFinished()调用将向正在停止的活动报告而不是新活动。 这在选择单个项目然后旋转时工作正常。 这是我正在使用的代码。 活动: public final class DemoActivity extends Activity implements NumberListFragment.RowTappedListener, LoaderManager.LoaderCallbacks { private static final AtomicInteger activityCounter = new AtomicInteger(0); private int myActivityId; private ResultFragment resultFragment; private Integer selectedNumber; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); myActivityId = activityCounter.incrementAndGet(); Log.d(“DemoActivity”, “onCreate for ” + myActivityId); setContentView(R.layout.demo); resultFragment = (ResultFragment) getFragmentManager().findFragmentById(R.id.result_fragment); getLoaderManager().initLoader(0, […]

即使应用程序处于非活动状态,CursorLoader如何自动更新视图?

我一直在研究一个小的待办事项列表应用程序。 我使用CursorLoader从内容提供者更新ToDolistview。 我有一个函数onNewItemAdded() ,当用户在文本视图中输入一个新项并单击Enter时调用该函数。 参考下文: public void onNewItemAdded(String newItem) { ContentResolver cr = getContentResolver(); ContentValues values = new ContentValues(); values.put(ToDoContentProvider.KEY_TASK, newItem); cr.insert(ToDoContentProvider.CONTENT_URI, values); // getLoaderManager().restartLoader(0, null, this); // commented for the sake of testing } @Override protected void onResume() { super.onResume(); //getLoaderManager().restartLoader(0, null, this); // commented for the sake of testing } public Loader onCreateLoader(int […]

CursorLoaders有什么好处?

我在我的应用程序中广泛使用Cursors ,以加载偶尔从数据库写入信息和向数据库写入信息。 我已经看到Honeycomb和兼容包具有新的Loader类,旨在帮助以“良好”的方式加载数据。 从本质上讲,这些新类(特别是CursorLoader )是否比以前管理数据的方法要好得多? 例如, CursorLoader比托管Cursors有什么好处? 我使用ContentProvider来处理数据,这显然需要Uris但是它如何与initLoader()方法相结合? 我必须设置每个Fragments以单独使用装载机吗? 并且每个加载器的id需要多么独特,它是在我的应用程序范围内还是仅仅是一个片段? 有没有简单的方法简单地将Uri传递给CursorLoader来查询我的数据? 我现在所能看到的是,Loaders添加了一个不必要的额外步骤来将我的数据导入我的应用程序,那么有人可以更好地向我解释它们吗?

在活动中初始化加载程序

我目前正在尝试学习如何使用Loaders,并且在我的活动中无法启动Loader。 import android.support.v4.app.LoaderManager; import android.support.v4.content.Loader; public class ASwitchActivity extends Activity implements LoaderManager.LoaderCallbacks { public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); getLoaderManager().initLoader(0, null, this); } public Loader onCreateLoader(int id, Bundle args) { return new SampleLoader(getBaseContext(), account, “dog”); } public void onLoadFinished(Loader loader, SampleLoader.SampleLoaderResult out) { TextView t=(TextView)findViewById(R.id.testTV); t.setText(“yay”); } public void onLoaderReset(Loader loader){ } } 但是Eclipse给出了一个错误说明: […]

自定义CursorLoader和支持ListView的CursorAdapter之间的数据不同步

背景: 我有一个自定义CursorLoader ,它直接与SQLite数据库一起使用,而不是使用ContentProvider 。 此加载器使用由CursorAdapter支持的ListFragment 。 到现在为止还挺好。 为了简化操作,我们假设UI上有一个Delete按钮。 当用户单击此onContentChanged() ,我从DB中删除一行,并在我的加载器上调用onContentChanged() 。 另外,在onLoadFinished()回调中,我在我的适配器上调用notifyDatasetChanged()以刷新UI。 问题: 当删除命令快速连续发生时,意味着快速连续调用bindView() , bindView()最终将使用陈旧数据 。 这意味着行已被删除,但ListView仍在尝试显示该行。 这导致了Cursorexception。 我究竟做错了什么? 码: 这是一个自定义的CursorLoader(基于Diane Hackborn女士的建议 ) /** * An implementation of CursorLoader that works directly with SQLite database * cursors, and does not require a ContentProvider. * */ public class VideoSqliteCursorLoader extends CursorLoader { /* * This […]

我必须使用Fragments来获得LoaderManager吗?

根据一些文档,我可以在Activity或Fragment中使用Loader,但Compatibility Package显示只有FragmentActivity具有getLoaderManager()方法。 由于旧的托pipe游标已被弃用,我们必须使用光标加载器。 那么为什么这个数据pipe理function应该与UI小部件的select联系起来呢? 对我来说完全是无稽之谈。 谢谢P.

如何在android中的LoaderManager中使用两个游标和CursorJoiner

我有一个ContentProvider ,它有两个表1. OnlineContacts 2. AllContacts 。 然后我有一个方法,我在查询两个表,并分别得到他们的结果cursors 。 然后使用CursorJoiner join他们并制作Contacts列表。 将此列表传递给我的CustomAdapter extending BaseAdapter ,我填充我的listview 。 喜欢 : public static List<Contact> getContacts(Context context){ List<Contact> contactList = new ArrayList<Contact>(); // Getting First Cursor String URL = xyz; Uri baseUri1 = Uri.parse(URL); String[] select = xyz; String where =xyz; Cursor cursor = context.getContentResolver().query(baseUri1, select, where, null, "pid"); // […]

从LoaderManager获取“在启动时调用doStart”。 为什么?

我的代码有一个活动,有一个FragmentPagerAdapter根据需要创build“n”个片段。 Activity有一个加载器,每个片段都有自己的加载器。 所有装载机都有唯一的ID。 (Activity的加载器实际上决定了适配器中的页数) 我不断地得到这个警告,不能把我的手指放在什么原因造成的。 它似乎并不重要,也看着LoaderManger的代码抛出这个警告,但仍然 – 警告通常是错误的迹象。 最初使用FragmentStatePagerAdapter,然后移动到FragmentPagerAdapter,认为这可能是问题 – 但显然不是这样。 发布代码确实会使这个变得复杂,并且添加很less。 有什么想法吗?

Loader和LoaderManager – 如何确定当前的Loader是否处于活动状态并正在运行?

如何查询LoaderManager以查看Loader是否正在运行?

是onLoadFinished()asynchronous(后台线程)?

我目前正在使用一个加载器pipe理器来填充drawablelayout中的expandablelistview。 如果callback函数onLoadFinished()正在UI线程或后台线程上运行,我无法在文档中find任何地方。 它是在后台线程?