3

similar questions這個,但它可能並不明顯,如果問題在於某人(像我)試圖爲MapView實現onTap事件。問題/問題是這樣的:

您試圖實現自定義ItemizedOverlay在MapView,像這樣:

MyCustomItemizedOverlay mOverlay = new MyCustomItemizedOverlay(drawable, mContext); 

通常情況下,如果你是從一個活動這樣做,這是不夠的使用方法:

MyCustomItemizedOverlay mOverlay = new MyCustomItemizedOverlay(drawable, this); 

這是您可以在各種教程(包括谷歌的HelloItemizedOverlay例子)找到一條線,你可以從他們的一個複製它。但是,如果您嘗試將此代碼移到其他任何其他位置(例如,到AyncTask),那麼this將不起作用。如果你想(像我一樣)來改變thisgetBaseContext()getApplicationContext(),那麼你會遇到下面的錯誤,當您嘗試在您的MapView上ItemizedOverlay挖掘:

08-23 09:59:21.444: E/AndroidRuntime(30056): FATAL EXCEPTION: main 
08-23 09:59:21.444: E/AndroidRuntime(30056): android.view.WindowManager$BadTokenException: Unable to add window -- token null is not for an application 
08-23 09:59:21.444: E/AndroidRuntime(30056): at android.view.ViewRootImpl.setView(ViewRootImpl.java:589) 
08-23 09:59:21.444: E/AndroidRuntime(30056): at android.view.WindowManagerImpl.addView(WindowManagerImpl.java:326) 
08-23 09:59:21.444: E/AndroidRuntime(30056): at android.view.WindowManagerImpl.addView(WindowManagerImpl.java:224) 
08-23 09:59:21.444: E/AndroidRuntime(30056): at android.view.WindowManagerImpl$CompatModeWrapper.addView(WindowManagerImpl.java:149) 
08-23 09:59:21.444: E/AndroidRuntime(30056): at android.app.Dialog.show(Dialog.java:277) 
08-23 09:59:21.444: E/AndroidRuntime(30056): at android.app.AlertDialog$Builder.show(AlertDialog.java:932) 
08-23 09:59:21.444: E/AndroidRuntime(30056): at com.myapp.MyCustomItemizedOverlay.onTap(MyCustomItemizedOverlay.java:32) 

這是什麼錯誤的原因,你如何解決它?

回答

3

問題在於,您需要指定活動上下文其中將顯示ItemizedOverlay,而不是應用程序上下文。這從錯誤信息中不會立即清楚,我相信這個混淆的來源可以在Google的MapView Tutorial的錯誤中找到。它明確地說要引用應用程序上下文,何時應該引用ItemizedOverlay將顯示的活動上下文。因此,你可以通過改變上述的參考線解決這個問題:

MyCustomItemizedOverlay mOverlay = new MyCustomItemizedOverlay(drawable, MyActivity.this); 

甚至更​​好:

MyCustomItemizedOverlay mOverlay = new MyCustomItemizedOverlay(drawable, mapView.getContext()); 

其中mapView是在ItemizedOverlay實際顯示的MapView的實例。

1

有一個問題,創建警報對話框......通過改變 'getApplicationContext()' 到 'MyActivity.this' 解決....

感謝@robguinness:d

相關問題