Articles of android cursorloader

ExpandableListView的SimpleCursorTreeAdapter和CursorLoader

我试图通过使用带有SimpleCursorTreeAdapter的CursorLoader来异步查询提供程序 这是我的Fragment类,它实现了CursorLoader public class GroupsListFragment extends ExpandableListFragment implements LoaderManager.LoaderCallbacks { private final String DEBUG_TAG = getClass().getSimpleName().toString(); private static final String[] CONTACTS_PROJECTION = new String[] { ContactsContract.Contacts._ID, ContactsContract.Contacts.DISPLAY_NAME }; private static final String[] GROUPS_SUMMARY_PROJECTION = new String[] { ContactsContract.Groups.TITLE, ContactsContract.Groups._ID, ContactsContract.Groups.SUMMARY_COUNT, ContactsContract.Groups.ACCOUNT_NAME, ContactsContract.Groups.ACCOUNT_TYPE, ContactsContract.Groups.DATA_SET }; GroupsAdapter mAdapter; @Override public void onActivityCreated(Bundle savedInstanceState) { super.onActivityCreated(savedInstanceState); populateContactList(); getLoaderManager().initLoader(-1, […]

即使应用程序处于非活动状态,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 […]

Android浏览历史记录只留下一些网站

使用下面的function,我试图获取用户在其Android手机上从Chrome浏览器访问的最新url。 此function适用于大多数站点,但不适用于“www.reddit.com”。 如果我访问“www.google.com”,“www.hulu.com”或“www.kayak.com”,则下面的urlvariables会更新,但如果我转到“www.reddit.com”,则不会更新 。 如果我去“m.reddit.com”它会更新。 与facebook相同的问题,检测m.facebook.com但不是www.facebook.com 。 我不明白Android记录一个而不是另一个的“www.reddit.com”和“m.reddit.com”之间有什么区别。 我需要在代码中进行哪些更改才能检测到所有URL访问? public String returnLastChromeURL(int browserCode) { String[] proj = new String[] { Browser.BookmarkColumns.DATE, Browser.BookmarkColumns.TITLE, Browser.BookmarkColumns.URL }; String dateTime; Uri uriCustom = Uri .parse(“content://com.android.chrome.browser/bookmarks”); String sel = Browser.BookmarkColumns.BOOKMARK + ” = 0″; // 0 = history, // 1 = bookmark try { Cursor mCur = mContext.getContentResolver().query(uriCustom, proj, sel, […]

自定义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 […]

分页列表和CursorLoader

我需要实现分页列表,它使用Loader从ContentProvider获取Cursor 。 我有页脚,当用户点击它 – 我需要添加下一个logging列表。 如何使用Loader刷新列表中的数据? 或者我应该在这里做什么?

带光标的ViewPager PagerAdapter – CursorLoader.onLoadFinished不会被不同的查询调用

我正在做一个报价应用程序,从数据库中拉引号,我需要在ViewPager中显示引号。 我创build了我的CursorPagerAdapter,这似乎很好。 public class MyCursorPagerAdapter extends PagerAdapter { private Cursor cursor; private LayoutInflater inflater; public MyCursorPagerAdapter(Context context, Cursor cursor) { Log.d(MainActivity.TAG, "MyCursorPagerAdapter.onCreate()"); this.cursor = cursor; this.inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE); } public void swapCursor(Cursor cursor) { //if(cursor != null) { Log.d(MainActivity.TAG, "swapCursor()."); this.cursor = cursor; //notifyDataSetChanged(); //} } /** * Metóda destroyItem */ @Override public void […]

SQLite数据到一个RecyclerView

该应用程序在SQLite数据库中有数据。 UI主要是一个RecyclerView。 问题是如何最好地将数据从数据库传输到UI,同时保持主线程? 我原本计划使用CursorLoader,ContentProvider和RecyclerView。 但是阅读它看起来像RecyclerView没有对Cursor提供的数据的开箱即用的支持。 荡。 然后,我留下了几个其他的select… AsyncTask加载数据,将其放入模型对象,并传递到RecyclerView适配器。 除了丑陋之外,它不是configuration更改友好的。 一个自定义的Loader,它从SQL加载数据并将其推入模型对象。 使用Cursor加载器,当它返回Cursor迭代通过它将数据推送到模型对象。 我怀疑这会发生在主线上,可能会损害性能。 使用Otto发送请求消息以请求数据,然后通过返回消息返回模型对象集合。 可能有〜500件东西,所以我觉得我可能会更喜欢奥托这样做。 如果我使用的是模型对象而不是Cursor的集合,我看不到ContentProvider的好处,而且我也失去了UI自动刷新数据更改(这可能是有用的)的能力。 这些选项都没有吸引力,有没有更好的办法? 该应用程序是在时间压力,所以无论是需要相当快实施。 不幸的是,UI需要水平滚动,只针对棒棒糖,所以RecyclerView似乎比ListView更好。

使用CursorLoader获取电子邮件会导致邮件重复

我正在尝试使用联系人的电子邮件ID。 为此,我正在使用游标加载器。 有一个问题,我也得到重复的电子邮件ID。 如何删除电子邮件的重复。 我应该使用原始查询“SELECT DISTINCT”,而不是使用CursorLoader还是有一些其他的解决scheme? @Override public Loader<Cursor> onCreateLoader(int arg0, Bundle arg1) { String[] projection = new String[] { ContactsContract.Contacts._ID, ContactsContract.Contacts.DISPLAY_NAME, ContactsContract.CommonDataKinds.Email.DATA}; String sortOrder = ContactsContract.Contacts.DISPLAY_NAME + " COLLATE LOCALIZED ASC"; String selection = ContactsContract.Contacts.IN_VISIBLE_GROUP +"='1' AND " + Email.DATA +" IS NOT NULL AND " + Email.DATA +" != \"\" " ; //showing […]

带有CursorLoader的GROUP BY

如何为我的CursorLoader定义一个GROUP BY查询? 我看到的CursorLoader的两个构造函数可以使用单个Context或者Context , Uri , projection , selection , selectionArgs和sortOrder 。 但是没有groupBy 。 (我正在使用Android 2.3设备的支持包)

LoaderManager是做什么的?

我想了解loadermanager是做什么的。 任何人都可以分享一个例子吗? 创build游标时我必须使用它们吗? 如果不是我应该如何使用? 一个简单的例子非常感谢。