0

我在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> 

回答

1

把你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

相關問題