在mapview上的地图图像数据完成后,我应该在哪写代码以关闭ProgressDialog?

问题描述:

我在setContentView之后立即设置ProgressDialog以弹出ProgressDialog。在mapview上的地图图像数据完成后,我应该在哪写代码以关闭ProgressDialog?

在mapview上完成地图图像数据后,我想调用方法来关闭ProgressDialog。

我想知道我应该在哪写代码来解雇它。

我已经写下了这些源代码。 如果你帮我,我很感激。

谢谢。

这里是我的地图活动类:

package sample.MyMap; 

import sample.MyMap.R; 
import com.google.android.maps.MapActivity; 
import com.google.android.maps.MapController; 
import com.google.android.maps.MyLocationOverlay; 
import android.app.Dialog; 
import android.app.ProgressDialog; 
import android.content.Intent; 
import android.os.Bundle; 
import android.util.Log; 

public class MyMapActivity extends MapActivity { 
    private MyMapView map; 
    private MapController controller; 
    private ProgressDialog progressDialog; 

    /** Called when the activity is first created. */ 
    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     Log.d("TEST", this + " onCreate"); 
     setContentView(R.layout.main); 
     progressDialog = ProgressDialog.show(this, "Please wait...", "Loading map view ...", true); 
     initMapView(); 
     initMyLocation(); 
    } 

    @Override 
    protected boolean isRouteDisplayed() { 
     return false; 
    } 

    private void initMapView() { 
     map = (MyMapView) findViewById(R.id.map); 
     controller = map.getController(); 
     map.setSatellite(false); 
     map.setBuiltInZoomControls(true); 
    } 

    private void initMyLocation() { 
     final MyLocationOverlay overlay = new MyLocationOverlay(this, map); 
     overlay.enableMyLocation(); 
     overlay.enableCompass(); 
     overlay.runOnFirstFix(new Runnable() { 

      public void run() { 
       controller.setZoom(18); 
       controller.animateTo(overlay.getMyLocation()); 
      } 
     }); 
     map.getOverlays().add(overlay); 
    } 

} 

这里是我的MapView类:

package sample.MyMap; 

import android.content.Context; 
import android.util.AttributeSet; 
import android.util.Log; 

import com.google.android.maps.MapView; 

public class MyMapView extends MapView { 

    public MyMapView(Context context, String apiKey) { 
     super(context, apiKey); 
    } 

    public MyMapView(Context context, AttributeSet attrs, int defStyle) { 
     super(context, attrs, defStyle); 
    } 

    public MyMapView(Context context, AttributeSet attrs) { 
     super(context, attrs); 
    } 

    @Override 
    protected void onDetachedFromWindow() { 
     super.onDetachedFromWindow(); 
     Log.d("TEST", "onDetachedFromWindow"); 
    } 

    @Override 
    protected void onSizeChanged(int w, int h, int oldw, int oldh) { 
     super.onSizeChanged(w, h, oldw, oldh); 
     Log.d("TEST", "onSizeChanged"); 
    } 

    @Override 
    public void onWindowFocusChanged(boolean hasFocus) { 
     super.onWindowFocusChanged(hasFocus); 
     Log.d("TEST", "onWindowFocusChanged"); 
    } 

    @Override 
    public void preLoad() { 
     super.preLoad(); 
     Log.d("TEST", "preLoad"); 
    } 

} 

这里是我的清单文件:

<?xml version="1.0" encoding="utf-8"?> 
<manifest xmlns:android="http://schemas.android.com/apk/res/android" 
     android:versionCode="1" 
     android:versionName="1.0" package="sample.MyMap"> 
    <uses-sdk android:minSdkVersion="7" /> 
    <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"></uses-permission> 
    <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"></uses-permission> 
    <uses-permission android:name="android.permission.INTERNET"></uses-permission> 

    <application android:icon="@drawable/icon" android:label="@string/app_name"> 
     <activity android:label="@string/app_name" android:name="MyMapActivity"> 
      <intent-filter> 
       <action android:name="android.intent.action.MAIN" /> 
       <category android:name="android.intent.category.LAUNCHER" /> 
      </intent-filter> 
     </activity> 
     <uses-library android:name="com.google.android.maps"></uses-library> 

    </application> 
</manifest> 

把你initMapView & initMyLocation方法在这次会议之后,如下面代码&所述hod关闭下面定义的对话框

new Thread(new Runnable() 
{ 
    public void run() 
    { 
     initMapView(); 
     initMyLocation(); 
     progressDialog.dismiss(); 
    } 
}).start(); 
+0

谢谢你的建议。 我尝试过你教过的酱。但是,结果成为以下运行时错误。 “ ”java.lang.RuntimeException:无法在未调用Looper.prepare()的线程内创建处理程序“ 然后,我更改了代码,以便可以使用该处理程序。 但它不能很好地工作。 根据日志文件,进度对话框立即显示并解除。 我看不到屏幕上的对话框。 Mapview尚未完成下载地图的图像。 你能告诉我另一个想法吗? – Atsushi

+0

尝试像这样:-----首先让你的进度对话框变为静态。之后,尝试在map.getOverlays()。add(overlay);之后的initMyLocation()方法中放置progressDialog.dismiss()。 回复你得到的... –

+0

我试着像你的建议。但我得到了和以前一样的结果。对话很快就被解雇了。然后,mapview仍在加载图片。 – Atsushi