【问题标题】:Creating AlertDialog with Static Methods?使用静态方法创建 AlertDialog?
【发布时间】:2011-03-29 07:14:39
【问题描述】:

我已经完成了我正在尝试制作的大部分游戏,并且在整个项目中我创建了一个特定的 Activity,它也称为 SurfaceView 和 Thread。我在 3 个类中的每一个中都放置了一个 update() 方法,这样每次发生变化时它们都知道其他类在哪里。显然,做这样的事情的唯一方法是使用静态方法......这很好,直到我的 SurfaceView 发生碰撞并且我想告诉 Activity 该做什么。我可以传递信息,但我找不到制作 AlertDialog 的方法。

我知道我不能从静态方法调用 showDialog(),但我找不到一种方法来创建一个非静态方法来调用它,然后从静态方法调用该方法。我一直在寻找答案,我听说过一些关于实例化对象的事情,但我无法弄清楚这意味着什么......

如果有人有一个好主意让我解决这个问题,请告诉我:)

【问题讨论】:

  • 我想记住不鼓励使用静态对话框,因为它们链接到上下文,当 Activity 被销毁(例如屏幕旋转)时,这可能会成为一个相当大的问题。
  • 为什么不将上下文传递给静态方法?
  • 感谢两位的回复。 Sephy,我读过很多文章,从长远来看,静态方法是一个坏主意,我尽可能地避免了这个问题,但似乎我找不到解决这个问题的方法。我知道我必须从 SurfaceView 调用 Activity 中的方法,这迫使我使用静态方法……对吗? Pentium10,对不起,这是我第一次玩游戏,我有点理解上下文是什么,但我不确定你的意思,你能给我举个例子吗?我不太关心解决问题,因为我知道出了什么问题……非常感谢!

标签: android static android-activity surfaceview android-alertdialog


【解决方案1】:

这是我使用的:

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();     

}

【讨论】:

    【解决方案2】:

    SurfaceView 扩展了 View,因此有一个 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();
    

    如果您的活动重新启动,这可能无法作为 Activity.showDialog(int) 工作(对话框可能会简单地消失,您必须自己处理状态)。

    希望对你有帮助

    【讨论】:

    • 不能在静态方法中调用 getContext()。
    猜你喜欢
    • 1970-01-01
    • 2010-12-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-07-03
    • 2010-10-17
    相关资源
    最近更新 更多