【问题标题】:Several cursors in onCreateLoader() methodonCreateLoader() 方法中的几个游标
【发布时间】:2012-12-17 12:12:11
【问题描述】:

我在使用 CursorLoader 时遇到问题。我需要检索给定名称的电话和电子邮件地址。

我实现了LoaderManager.LoaderCallbacks<Cursor>接口的方法。问题是我需要先从表联系人中获取contact_id,然后根据该contact_id 查询电子邮件和电话的RawContacts/Data 表。

我找不到您在onCreateLoader() 中有多个查询的示例,通常您返回new CursorLoader(...)。我有使用managedQuery(..) 方法获取联系人ID 并将其传递给CursorLoader 的想法,但我想这不是一个好主意。有什么建议吗?

【问题讨论】:

标签: android android-cursorloader


【解决方案1】:

在 OnCreateLoader 中,有一个 id 参数可以用来改变 CursorLoader。

你可以这样做

onCreateLoader(int id, bundle args) {

    switch(id) {

        case FETCH_CONTACT_ID: {
             //Return CursorLoader for fetching contactID
             break;
        }

        case FETCH_CONTACT_INFO: {
             //Return CursorLoader for fetching raw contacts
             break;
        }
   }
}

OnLoadFinished(Loader loader, Cursor c) {

    switch(loader.getId()) {

     case FETCH_CONTACT_ID: {
         //Contact IDs have been fetched, so start fetching raw contact data
         //Enter the IDs you want to fetch data for in the bundle which will be passed to onCreateLoader()
         mLoaderManager().restartLoader(FETCH_CONTACT_INFO, args);
         break;
    }

    case FETCH_CONTACT_INFO: {
         //Raw contact info has been fetched, do whatever you want with it
         break;
    }
    }
}

【讨论】:

  • 我想我理解正确,我会尝试实现这一点。感谢您帮助我了解 Loaders。
  • 没问题..如果您在实施此问题时遇到任何问题,只需用您的代码评论此问题即可.. :-)
  • 但是 onCreateLoader() 必须有一个返回类型。您的返回类型是什么?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-05-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多