0

setContentView 바로 다음에 ProgressDialog를 설정하여 ProgressDialog를 팝업합니다.Mapview에서지도 이미지 데이터가 완료된 후 ProgressDialog를 닫는 코드는 어디에 작성해야합니까?

mapview에서지도 이미지 데이터를 완성한 후 ProgressDialog를 닫으려면 메서드를 호출하고 싶습니다.

내가 해고 할 코드를 어디에 써야하는지 알고 싶습니다.

다음 소스 코드를 작성했습니다. 도와 주시면 정말 감사하겠습니다.

감사합니다. 여기

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 방법을 넣어

다음
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); 
    } 

} 

내지도보기 클래스입니다 : 여기

내지도 활동 클래스 이 코드가 만난 후 & 코드에 설명 된대로 아래 정의와 같이 대화를 닫습니다.

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

감사합니다. 내가 가르친 소스를 시험해 보았습니다. 그러나 결과는 다음과 같은 런타임 오류가 발생했습니다. "java.lang.RuntimeException : Looper.prepare()를 호출하지 않은 스레드에서 처리기를 만들 수 없습니다." 그런 다음 핸들러를 사용할 수 있도록 코드를 변경했습니다. 하지만 제대로 작동하지 않을 수 있습니다. 로그 파일에 따르면 진행 대화 상자가 즉시 표시되고 해제되었습니다. 화면에서 대화 상자를 볼 수 없습니다. 지도보기에서지도의 이미지 다운로드가 완료되지 않았습니다. 다른 아이디어를 알려주시겠습니까? – Atsushi

+0

다음과 같이 시도하십시오 : ----- 먼저 진행 대화 상자를 정적으로 만드십시오. 그런 다음 map.getOverlays() 다음에 initMyLocation() 메소드에 progressDialog.dismiss()를 넣으십시오. add (overlay); 당신이 얻은 답장 ... –

+0

나는 당신의 조언처럼 노력했습니다. 그러나 이전과 같은 결과를 얻었습니다. 대화 상자가 곧 해제되었습니다. 그런 다음지도보기에서 여전히 이미지를로드 중입니다. – Atsushi

관련 문제