2012-11-11 384 views
0

我有下面的代碼不起作用,應該怎麼做才能調試它?如何彈出Android對話框

我創建了一個新的Android 2.2的項目,增加了一個按鈕,按鈕有:

android:onClick="Test" 

Test()功能是在這裏:

public void Test(View view) { 
    AlertDialog.Builder builder = new AlertDialog.Builder(this.getApplicationContext()); 
    builder.setTitle("Title"); 
    builder.setMessage("Message"); 
    builder.setPositiveButton("ok", new OnClickListener() { 
      public void onClick(DialogInterface arg0, int arg1) 
      { 
       // TODO Auto-generated method stub 
       arg0.dismiss(); 
      }}); 
    builder.setCancelable(false); 
    builder.create().show(); 
} 

當它的觸發,show()會導致此異常:

Thread [<1> main] (Suspended (exception WindowManager$BadTokenException)) 
    <VM does not provide monitor information> 
    AlertDialog(Dialog).show() line: 245  
    MainActivity.Test(View) line: 39  
    Method.invokeNative(Object, Object[], Class, Class[], Class, int, boolean) line: not available [native method] 
    Method.invoke(Object, Object...) line: 521 
    View$1.onClick(View) line: 2067 
    Button(View).performClick() line: 2408 
    View$PerformClick.run() line: 8817 
    ViewRoot(Handler).handleCallback(Message) line: 587 
    ViewRoot(Handler).dispatchMessage(Message) line: 92 
    Looper.loop() line: 143 
    ActivityThread.main(String[]) line: 4914  
    Method.invokeNative(Object, Object[], Class, Class[], Class, int, boolean) line: not available [native method] 
    Method.invoke(Object, Object...) line: 521 
    ZygoteInit$MethodAndArgsCaller.run() line: 868 
    ZygoteInit.main(String[]) line: 626 
    NativeStart.main(String[]) line: not available [native method] 

另外還有一些其他的[R事情我想:DialogFragment doesn't show up

回答

1

這是一個獨特的logcat,你改寫了由手沒有你... :)接下來的時間可以突出logcat的,然後按Ctrl鍵+ç

無論如何,我看到BadTokenException。變化:

new AlertDialog.Builder(this.getApplicationContext()); 

要:

new AlertDialog.Builder(MyActivity.this); 
+0

謝謝,這解決了這個問題,我將不得不閱讀上下文... – agou

3

刪除安卓的onClick =從layout.xml 「測試」,並使用

Button btn = (Button) view.findViewById(R.id.your_btn); 
btn.setOnClickListener(new OnClickListener() { 
test(); 
}); 

代替

BTW。你不應該使用getApplicationContext()--->使用這個

+0

爲什麼必須刪除onClick屬性?它顯然工作,涉及較少的代碼。 – Sam

+0

謝謝,明白了。 – agou

+0

onClick atribute是在android sdk版本7中添加的。所以它不適用於<7 sdk版本。我認爲這是@ angou的問題 2.在我看來,最好是保持xml以外的事件的邏輯。這是更合理的。 – qd0r