2010-08-13 72 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();  

}