2013-06-18 62 views
3

我正在開發使用andengine 現在我需要的是建立一個警報對話框 我用這如何使用andengine

case MENU_OPT: 
     mEngine.runOnUpdateThread(new Runnable() { 
     @Override 
     public void run() { 


      AlertDialog.Builder alert = new AlertDialog.Builder(GameActivity.this); 
      alert.setTitle(""); 
      alert.setMessage(""); 
      alert.setPositiveButton("OK", new OnClickListener() { 
        @Override 
        public void onClick(DialogInterface arg0, int arg1) { 

        } 
      }); 

      alert.show(); 
     } 
     }); 
     break; 

,但得到的錯誤 了java.lang.RuntimeException遊戲創建警報對話框:可以不創建處理程序內部線程沒有調用Looper.prepare()

代碼有什麼問題,或者我可以使用alertdialog生成器與andengine或不。

+0

我不認爲你甚至需要在UpdateThread運行。 – jmroyalty

+0

你已經試過Looper.prepare();在創建/顯示對話框之前,Looper.loop();之後? – damian

+0

還用alertDialog替換alert.show()alert = builder.create(); \t \t \t \t alert.show(); –

回答

2

alert.show();不是用引擎顯示警報的方式。

1.您可以使用Activity.showDialog()進行提醒。

OR

2.You可以使用AlertDialog.Builder,如:

AlertDialog.Builder builder = new AlertDialog.Builder(this); 
0

你已經做了所有的東西在你的代碼的權利只是一個變化的需要。

mEngine.runOnUIThread(new Runnable() { 
    @Override 
    public void run() { 


     AlertDialog.Builder alert = new AlertDialog.Builder(GameActivity.this); 
     alert.setTitle(""); 
     alert.setMessage(""); 
     alert.setPositiveButton("OK", new OnClickListener() { 
       @Override 
       public void onClick(DialogInterface arg0, int arg1) { 

       } 
     }); 

     alert.show(); 
    } 
    }); 

您必須UIThread才能顯示對話框而不是UpdateThread,因爲兩者都有其獨立的用途。

+1

UI線程是普通線程,所以我看不到需要通過UI線程上的Runnable來做到這一點。只需調用alertDialog代碼 – jmroyalty

+0

不,根據我的知識,我們不能直接使用它需要線程的警報對話框。這個答案在遊戲的場景結構中變得有用。 – Siddharth

3

只是要客體主Activity類和使用對象

activity.runOnUIThread(new Runnable() { 
    @Override 
    public void run() { 


     AlertDialog.Builder alert = new AlertDialog.Builder(GameActivity.this); 
     alert.setTitle(""); 
     alert.setMessage(""); 
     alert.setPositiveButton("OK", new OnClickListener() { 
       @Override 
       public void onClick(DialogInterface arg0, int arg1) { 

       } 
     }); 

     alert.show(); 
    } 
    });