2

我有三個數據庫表:StacksDatesZ,其中Stacks是我的主表,並DatesZ是「孩子」的表,與外國鍵列,鏈接到Stacks的主鍵列。 (請原諒我的術語,如果需要,我可以介紹的模式。)填充多個數據源(使用裝載機)在Android的ListView

我將從此僅指StacksDates,減少我的解釋複雜性,但如果它是相關的,Z將完全使用與Dates相同。

在一個典型的ListFragment,我建立一個ListView使用上LoaderManagerreference page討論的實現 - 創建一個空的適配器,然後調換Cursor出來的時候我查詢已完成(查詢在onCreateLoader()和交換在onLoadFinished())。

我詢問對Stacks表(使用URI,因爲我的DB是門前由Content Provider使用Simple Content Providerlibrary實現),作爲值我要綁定到每個項目在適配器getView(),大多發現這裏,這工作正常。

但是,我也希望綁定Dates表中的某些值,但我不確定如何執行此操作。在使用裝載器之前,我會在適配器中創建一個新的SQLiteOpenHelper,並直接在getView()方法中訪問輔助項,即從Dates表中返回Cursor。這是緩慢的,而且我敢肯定它是在事後一個壞主意:P

有沒有執行這一標準的方法,使用填充多個數據源(最好用裝載機)的列表視圖?

編輯:

  • Dates表可以具有多個記錄(具有不同的值) 爲每個相關聯的Stack
  • 我有一個ContentProvider,提供訪問所有三個表,這取決於URI
  • 我很高興也使用多個加載器,因爲我懷疑我必須做任何事情,因爲我需要顯示其他信息片段不與ListView中的內容相關聯。

回答

1

如果你需要做這在每行的基礎上,你基本上有兩種選擇:

  1. 盡一切鋒線在ContentProvider,例如,通過使用子查詢或更復雜的查詢。
  2. AdaptergetView()中執行查詢異步。這與加載遠程圖像的工作方式類似。

兩種方法都有其優點。 #1可能更簡單,但如果列表中有很多項目,速度可能不夠快。 #2的速度很快,因爲您只會查詢相關日期,但是在滾動時取消(或避免)查詢會很麻煩。

當您必須執行未知數量的裝載時,裝載機沒有任何意義。

+0

感謝Alex,我將在接下來的幾天探索這些 – ataulm

+1

我已經決定了第二個選項,然後緩存結果,因此取消操作是不必要的,因爲這將會被重新查詢。謝謝! – ataulm