将单个Cursor用于多个ListView

时间:2013-07-24 08:38:19

标签: android-listview google-maps-android-api-2 simplecursoradapter otto android-maps-extensions

这是answer对我更古老,更广泛的问题所产生的研究的延续。

使用单个Cursor(通过CursorLoader获取)来提供两个不同的视图是正确的,即:

  1. ListView ,通过SimpleCursorAdapter
  2. com.google.android.gms.maps。 GoogleMap 与标记?
  3. 我到目前为止的结果:

    1. 如果两个视图同步给予游标(即:没有涉及其他线程),则视觉上一切正常,但填充GoogleMap时UI被大大阻止
    2. 如果从 AsyncTask 中的Cursor填充GoogleMap,则UI会响应,但 ListView 存在异常:某些行重复,某些标记也是没有到达地图。
    3. 我的设置详情

      1. onResume()
      2. 期间,FragmentActivity加载了SQLite Cursor
      3. 以上活动主持 ViewPager ,其中包含两个片段:ListFragmentSupportMapFragment(使用ViewPager的结果是两个片段始终处于活动状态)
      4. 来自活动的游标通过Otto总线传递给片段(对于不熟悉:这只是回调接口的一个很薄的替代品,它在主线程上同步传递结果)

1 个答案:

答案 0 :(得分:1)

我认为这样做是正确的。可以改进的是,如果MapFragment不可见,它不会填充Map。当用户滑动到MapFragment页面时,它会填充它。

或者,您甚至可以执行以下操作。当MapFragment不可见时,它会开始填充地图,但它会以块的形式执行此操作(例如,通过块中的5个标记)。一旦填充了一个块,就可以通过调度在主线程处理程序中执行的另一个runnable来开始下一个块。这不会阻止主线程,并将“在后台”准备地图。