0

這是answer針對我的較老的更廣泛問題產生的一項研究的延續。對多個ListView使用單個光標

是否正確使用單個光標(通過CursorLoader獲得)餵養兩個不同的觀點,即:經由SimpleCursorAdapter

  1. 的ListView
  2. com.google.android.gms.maps。 GoogleMap帶標記?

結果即時具有迄今:

  1. 如果兩個視圖中給出光標同步(即:沒有其他線程參與),比在視覺上都工作正常,除了UI被顯着阻止時填充的GoogleMap
  2. 如果GoogleMap的是從光標的AsyncTask被填充,那麼UI可以響應,但很異常與的ListView:某些行是重複的,也有一些標記都沒有得到的地圖。我的設置

    1. SQLite的光標的

    細節在FragmentActivity期間的onResume()

  3. 上述活動承載ViewPager裝有兩個片段:ListFragmentSupportMapFragment(其後果使用ViewPager的是,這兩個片段將始終處於活動狀態)
  4. Cur從活動SOR通過Otto總線交付給片段(對於不熟悉的:這不過是薄替代回調接口,主線程同步帶來的結果)

回答

1

我相信這是正確的做到這一點。可以改進的是,如果MapFragment不可見,則不會填充Map。當用戶滑動到MapFragment頁面時,它會填充它。

另外,你甚至可以做以下事情。當MapFragment不可見時,它開始填充地圖,但它以塊的形式進行(例如,通過塊中的5個標記)。一旦填充了一個組塊,就可以通過調度另一個可在主線程處理程序中執行的runnable來開始下一個組塊。這不會阻止主線程,並會在後臺準備地圖。

+1

是的,我認爲這也是異步填充地圖的方式。我的設置中的一個特殊問題是共享遊標必須以某種方式緩存,直到將來映射可能需要時的某些非確定性時刻。 同時,我設法通過從股票GoogleMap切換到android-maps-extensions來緩解整個痛苦,其中包括提供異步人口。 – esteewhy