【问题标题】:How to implements Marker Lazy Loading from URL in MapView overlay如何在 MapView 叠加层中从 URL 实现标记延迟加载
【发布时间】:2011-09-12 09:37:46
【问题描述】:

我有可以显示叠加的活动。此叠加层具有来自网络的标记。

我怎样才能为这个标记实现从 URL 的延迟加载?

谢谢,伊戈尔

【问题讨论】:

  • 尝试使用developer.android.com/reference/android/os/AsyncTask.html在后台处理所有数据
  • 您能给我一些带有 MapView 及其标记的示例吗?
  • 是的。我知道这个。我问你关于如何实现覆盖标记延迟加载的示例。例如,当 MapView 显示覆盖时,所有标记都是相同的,称为“默认标记”。当我从 URL 获得真实标记时,我将“默认标记”替换为“真实标记”。清楚了吗??
  • 如果在星期四之前没有人回答,我会为此创建一个教程:D

标签: android android-mapview itemizedoverlay android-lazyloading


【解决方案1】:

您需要做的是创建一个 AsyncTask 来检索您的数据。一旦异步任务执行并且您拥有数据,UI 线程将调用 onPostExecute()。在您的 onPostExecute() 方法中,您将像在示例 android 代码中一样将数据添加到地图视图中。

这是一个最完整的例子。你应该可以用这个来填补这些漏洞。

    public class SomeActivity extends MapActivity {
        private MapView mYourMapView;

        protected void onCreate(Bundle yourbundle){
          super.onCreate(yourbundle);
          setContentView(R.layout.yourcontentview);

          mYourMapView = (MapView)findViewById(R.id.yourmapviewid);

          GetYourDataTask task = new GetYourDataTask(mYourMapView);
          task.execute();
        }
     }

     public class GetYourDataTask extends AsyncTask<Void, Void, Void>{
           private MapView mView;
           private List<Items> mYourItemsFromInternetSource;

           public GetYourDataTask(MapView view){
              this.mView = view;
           }

           protected Void doInBackground(Void... params){
                .....get some data from internets
                mYourItemsfromInternetSoruce = something you got from internet;
                return null;
           }

           protected Void onPostExecute(){
                YourOverlay overlay = new YourOverlay(mYourItemsFromInterSource);
                mView.getOverlays().add(overlay);
           }
    }

    public YourOverlay extends ItemizedOverlay<OverlayItem>{
              private List<OverlayItem> mItems;
              public YourOverlay(List<Item> itemsFromInternet)[
                     super(boundCenterBottom(someContext.getResources().getDrawable(R.drawable.map_pin)));
                     //for your items create overlay items then
                     List<OverlayItem> createdItems = someConvertFunction(itemsFromInternet);
                     for(OverlayItem item: createdItems){
                          mItems.add(item);
                          populate();
                     }
               }
    }

【讨论】:

  • 我认为你应该在 for 循环之后调用 populate()
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-09-26
  • 2021-05-07
  • 2021-05-25
  • 1970-01-01
相关资源
最近更新 更多