2011-10-27 83 views
2

我遇到了一个与我的mapview有关的问题 - 我使用AsyncTask填充它,但是在它完成后点不显示直到屏幕被点击(在第一个之后触摸所有点正确显示)。在AsyncTask中填充地图需要触摸屏幕才能看到分数

的onCreate:

对话框= ProgressDialog.show(MyMap.this, “填充地图”, “请稍候...”,真正的);

new AddOverlays()。execute();

我的AsyncTask:

class AddOverlays extends AsyncTask <Void, Void, String>{ 
     @Override 
     protected String doInBackground(Void... unsued) { 

       //do my looping work to add items to map 

      mapOverlays.add(itemizedOverlay); 

      String nothing = ""; 
      return nothing; 
     } 

     @Override 
     protected void onProgressUpdate(Void... unsued) { 

     } 

     @Override 
     protected void onPostExecute(String sResponse) { 
      if (dialog.isShowing()) 
       dialog.dismiss(); 
     } 
    } 
+0

您是否在'MapActivity'中使用'AsyncTask'作为内部类,或者使用'Service'来运行任务?如果是这样,你如何通过意图传递'MapView'参考,因为它不可序列化? – JJD

回答

2

尝试调用: invalidate()从UI线程 或 postInvalidate()从你的MapView对象,使地图视图重绘在另一个线程

您应该在onPostExecute(String sResponse)中拨打电话mapOverlays.add(itemizedOverlay);,因为添加新的叠加层不是一项昂贵的操作。

我想你会在doInBackground(Void... unused)做一些昂贵的操作,因为从现在开始你并不需要整个AddOverlays任务。

+0

我在onPostExecute中添加了,但没有解决,所以我退回(将它放回)。是的,doInBackground有很多繁重的工作。 RE:invalidate或PostInvalidate - 你的意思是在这个mapview的onCreate吗?你能举个例子吗? – bMon

+0

我可以将postInvalidate添加到onPostExecute吗?如果是这样如何? – bMon

+0

明白了,谢谢。 – bMon