2010-08-13 96 views
5

我已經完成了大部分我正在嘗試製作的遊戲,並且在整個項目中我創建了一個特定的Activity,該Activity也稱爲SurfaceView和Thread。我在3個類中的每一箇中都放了一個update()方法,以便每次都知道其他類的更改。顯然,做這樣的事情的唯一方法是使用靜態方法......直到在我的SurfaceView中發生碰撞,並且我想告訴Activity要做什麼之前,這很好。我可以傳遞這些信息,但是我找不到製作AlertDialog的方法。使用靜態方法創建AlertDialog?

我明白我不能從靜態方法調用showDialog(),但我找不到一種方法來使非靜態方法調用它,然後從靜態方法調用該方法。我一直在尋找一個答案,我已經聽到了一些關於實例化對象,但我不明白這是什麼意思...

如果有人有一個好主意,讓我繞過這一點,請讓我知道: )

+1

我覺得要記住,靜態對話感到沮喪,因爲他們都與一個背景下,它可以成爲相當一個問題,當活性摧毀(例如屏幕旋轉) – Sephy 2010-08-13 10:10:36

+0

爲什麼不將上下文傳遞給靜態方法? – Pentium10 2010-08-13 14:14:29

+0

謝謝你們的迴應。 Sephy從長遠來看,我已經讀過很多靜態方法是一個壞主意,我儘可能避免了這個問題,但似乎我找不到解決這個問題的方法。我知道我必須從SurfaceView的Activity中調用一個方法,這迫使我使用靜態方法...對嗎? Pentium10,我很抱歉,但這是我的第一場比賽,我有點了解什麼是上下文,但我不確定你的意思,你可以指點我的例子或任何東西?我並不關心如何解決問題,因爲我瞭解問題所在......非常感謝! – Aaron 2010-08-14 02:58:00

回答

0

SurfaceView擴展視圖,因而具有的getContext()方法

創建並顯示您的AlertDialog,你可以做下面的代碼你SurfaceView

AlertDialog.Builder builder = new AlertDialog.Builder(getContext()); 
builder.setTitle("title"); 
builder.setPositiveButton("OK", new DialogInterface.OnClickListener() { 
    public void onClick(DialogInterface dialog, int which) { 
    dialog.dismiss(); 
    } 
}); 
Dialog d = builder.create(); 
d.show(); 

這可能不是活動在裏面工作。 showDialog(int)如果你的ac tivity會重新啓動(對話框可能會消失,您將不得不自己處理狀態)。

希望這有助於

9

這是我使用的:

public static void messageDialog(Activity a, String title, String message){ 
    AlertDialog.Builder dialog = new AlertDialog.Builder(a); 
    dialog.setTitle(title); 
    dialog.setMessage(message); 
    dialog.setNeutralButton("OK", null); 
    dialog.create().show();  

}