2011-11-13 45 views
0

,我號召我的代碼對話功能,但每次我測試了它使一個強制關閉... 這裏是我的代碼:的Android自定義對話框意味着強制關閉

public void onLongPressFinished(MotionEvent arg0, 
       ManagedOverlay arg1, GeoPoint arg2, ManagedOverlayItem item) { 


      if (item!= null) // if the user longpresses a marker, it will pop up the route dialog 
      { 

       RouteDialog dialog = new RouteDialog(); 
       dialog.showCustomDialog(); 


      } 

和I類用來實現對話框:

package com.BuStopTracker; 

import android.app.Activity; 
import android.app.Dialog; 
import android.view.View; 
import android.widget.Button; 
import android.widget.EditText; 

public class RouteDialog extends Activity{ 



     public void showCustomDialog(){ 

      final Dialog dialog = new Dialog(this); 

      dialog.setContentView(R.layout.routetodialog);//loads layout from xml file 
      dialog.setTitle("Título do custom dialog"); 

      final Button ok = (Button) dialog.findViewById(R.id.bt_ok); 
      final Button cancelar = (Button) dialog.findViewById(R.id.bt_cancel); 
      final EditText editText = (EditText) dialog.findViewById(R.id.inputText); 

      ok.setOnClickListener(new View.OnClickListener() { 
       public void onClick(View v) { 

        //OK button action 

       } 
      }); 

      cancelar.setOnClickListener(new View.OnClickListener() { 
       public void onClick(View v) { 


        dialog.dismiss(); 

       } 
      }); 

     dialog.show(); 

     } 



} 

我知道,我的「長按探測器」功能正在工作,因爲我舉杯測試它,它工作得很好......

那麼,能不能有人,他LP我?我很確定我的故障是以我稱之爲對話的方式,我只是不明白爲什麼或在哪裏...

謝謝。

PS:按照要求,這裏的logcat的:

11-13 20:13:54.789: D/dalvikvm(406): GC_CONCURRENT freed 1153K, 54% free 3159K/6727K, external 2002K/2137K, paused 4ms+4ms 
11-13 20:13:55.109: D/dalvikvm(406): GC_CONCURRENT freed 616K, 51% free 3363K/6727K, external 2002K/2137K, paused 5ms+7ms 
11-13 20:13:55.369: D/dalvikvm(406): GC_EXTERNAL_ALLOC freed 721K, 54% free 3116K/6727K, external 2121K/2137K, paused 52ms 
11-13 20:13:55.829: I/MapActivity(406): Handling network change notification:CONNECTED 
11-13 20:13:55.829: E/MapActivity(406): Couldn't get connection factory client 
11-13 20:13:55.979: D/dalvikvm(406): GC_EXTERNAL_ALLOC freed 215K, 56% free 3020K/6727K, external 2440K/2692K, paused 77ms 
11-13 20:14:17.679: D/AndroidRuntime(406): Shutting down VM 
11-13 20:14:17.679: W/dalvikvm(406): threadid=1: thread exiting with uncaught exception (group=0x40015560) 
11-13 20:14:17.719: E/AndroidRuntime(406): FATAL EXCEPTION: main 
11-13 20:14:17.719: E/AndroidRuntime(406): java.lang.IllegalStateException: System services not available to Activities before onCreate() 
11-13 20:14:17.719: E/AndroidRuntime(406): at android.app.Activity.getSystemService(Activity.java:3536) 
11-13 20:14:17.719: E/AndroidRuntime(406): at android.app.Dialog.<init>(Dialog.java:141) 
11-13 20:14:17.719: E/AndroidRuntime(406): at android.app.Dialog.<init>(Dialog.java:123) 
11-13 20:14:17.719: E/AndroidRuntime(406): at com.BuStopTracker.RouteDialog.showCustomDialog(RouteDialog.java:23) 
11-13 20:14:17.719: E/AndroidRuntime(406): at com.BuStopTracker.BusTrackerBetaActivity$7.onLongPressFinished(BusTrackerBetaActivity.java:278) 
11-13 20:14:17.719: E/AndroidRuntime(406): at de.android1.overlaymanager.ManagedOverlayGestureDetector.invokeLongPressFinished(ManagedOverlayGestureDetector.java:76) 
11-13 20:14:17.719: E/AndroidRuntime(406): at de.android1.overlaymanager.ManagedOverlay.draw(ManagedOverlay.java:79) 
11-13 20:14:17.719: E/AndroidRuntime(406): at com.google.android.maps.Overlay.draw(Overlay.java:179) 
11-13 20:14:17.719: E/AndroidRuntime(406): at com.google.android.maps.OverlayBundle.draw(OverlayBundle.java:42) 
11-13 20:14:17.719: E/AndroidRuntime(406): at com.google.android.maps.MapView.onDraw(MapView.java:530) 
11-13 20:14:17.719: E/AndroidRuntime(406): at android.view.View.draw(View.java:6880) 
11-13 20:14:17.719: E/AndroidRuntime(406): at android.view.ViewGroup.drawChild(ViewGroup.java:1646) 
11-13 20:14:17.719: E/AndroidRuntime(406): at android.view.ViewGroup.dispatchDraw(ViewGroup.java:1373) 
11-13 20:14:17.719: E/AndroidRuntime(406): at android.view.ViewGroup.drawChild(ViewGroup.java:1644) 
11-13 20:14:17.719: E/AndroidRuntime(406): at android.view.ViewGroup.dispatchDraw(ViewGroup.java:1373) 
11-13 20:14:17.719: E/AndroidRuntime(406): at android.view.ViewGroup.drawChild(ViewGroup.java:1644) 
11-13 20:14:17.719: E/AndroidRuntime(406): at android.view.ViewGroup.dispatchDraw(ViewGroup.java:1373) 
11-13 20:14:17.719: E/AndroidRuntime(406): at android.view.ViewGroup.drawChild(ViewGroup.java:1644) 
11-13 20:14:17.719: E/AndroidRuntime(406): at android.view.ViewGroup.dispatchDraw(ViewGroup.java:1373) 
11-13 20:14:17.719: E/AndroidRuntime(406): at android.view.ViewGroup.drawChild(ViewGroup.java:1644) 
11-13 20:14:17.719: E/AndroidRuntime(406): at android.view.ViewGroup.dispatchDraw(ViewGroup.java:1373) 
11-13 20:14:17.719: E/AndroidRuntime(406): at android.view.View.draw(View.java:6883) 
11-13 20:14:17.719: E/AndroidRuntime(406): at android.widget.FrameLayout.draw(FrameLayout.java:357) 
11-13 20:14:17.719: E/AndroidRuntime(406): at android.view.ViewGroup.drawChild(ViewGroup.java:1646) 
11-13 20:14:17.719: E/AndroidRuntime(406): at android.view.ViewGroup.dispatchDraw(ViewGroup.java:1373) 
11-13 20:14:17.719: E/AndroidRuntime(406): at android.view.View.draw(View.java:6883) 
11-13 20:14:17.719: E/AndroidRuntime(406): at android.widget.FrameLayout.draw(FrameLayout.java:357) 
11-13 20:14:17.719: E/AndroidRuntime(406): at com.android.internal.policy.impl.PhoneWindow$DecorView.draw(PhoneWindow.java:1862) 
11-13 20:14:17.719: E/AndroidRuntime(406): at android.view.ViewRoot.draw(ViewRoot.java:1522) 
11-13 20:14:17.719: E/AndroidRuntime(406): at android.view.ViewRoot.performTraversals(ViewRoot.java:1258) 
11-13 20:14:17.719: E/AndroidRuntime(406): at android.view.ViewRoot.handleMessage(ViewRoot.java:1859) 
11-13 20:14:17.719: E/AndroidRuntime(406): at android.os.Handler.dispatchMessage(Handler.java:99) 
11-13 20:14:17.719: E/AndroidRuntime(406): at android.os.Looper.loop(Looper.java:130) 
11-13 20:14:17.719: E/AndroidRuntime(406): at android.app.ActivityThread.main(ActivityThread.java:3683) 
11-13 20:14:17.719: E/AndroidRuntime(406): at java.lang.reflect.Method.invokeNative(Native Method) 
11-13 20:14:17.719: E/AndroidRuntime(406): at java.lang.reflect.Method.invoke(Method.java:507) 
11-13 20:14:17.719: E/AndroidRuntime(406): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:839) 
11-13 20:14:17.719: E/AndroidRuntime(406): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:597) 
11-13 20:14:17.719: E/AndroidRuntime(406): at dalvik.system.NativeStart.main(Native Method) 
11-13 20:14:20.059: I/Process(406): Sending signal. PID: 406 SIG: 9 
+0

如果你得到一個強制關閉請張貼logcat的堆棧跟蹤發生的異常消息 – Craigy

回答

1

在RouteDialog你不應該擴展Activity。將上下文傳遞到showCustomDialog或者讓一個構造者把它存儲在你的班級中。

要解決很容易改變這一點,在RouteDialog:

public class RouteDialog { 
     public void showCustomDialog(Context context){ 
      final Dialog dialog = new Dialog(context); 
      /* leave rest as is */ 

,然後改變你的代碼,以顯示該對話框:

RouteDialog dialog = new RouteDialog(); 
dialog.showCustomDialog(this); 
+0

我試過了,但是在 中RouteDialog dialog = new RouteDialog(); dialog.showCustomDialog(this); 它只是不會讓我通過'this'作爲參數,它給我以下錯誤: 類型RouteDialog中的showCustomDialog(Context)方法不適用於參數(新的ManagedOverlayGestureDetector.OnOverlayGestureListener(){})\t BusTrackerBetaActivity.java \t/BusTrackerBeta/src/com/BuStopTracker \t line 278 \t Java問題 – Imperian

+0

啊,你需要發送上下文,所以改爲'BuStopTracker.this'。 – H9kDroid