是否必须在Activity中编写Alert Dialog开放代码?

时间:2014-02-04 08:15:01

标签: java android android-activity alertdialog

我全部, 我有一个MapActivity类,它将Activity和一个名为MapRenderer的关联类扩展为另一个包中的类。 (在调试时看到堆栈,可以看到控件确实从MapActivity传递到MapRenderer) 在一个特定的应用程序输入动作上,即当用户触摸屏幕时,我需要弹出一个android对话框。管理此操作的代码存在于MapRenderer类中(不扩展任何类),方法类似。

class MapRenderer{
public void drawRoute(Canvas canvas,String routeName) {

if(condition 0){
//Do 0 related stuff
}

if(condition N){
//Do N related stuff
// I need to implement the alert dialog at this place
    AlertDialog.Builder builder1 = new AlertDialog.Builder(context);
        builder1.setMessage("Write your message here.");
        builder1.setCancelable(true);
        builder1.setPositiveButton("Yes",
                new DialogInterface.OnClickListener() {
            public void onClick(DialogInterface dialog, int id) {
                dialog.cancel();
            }
        });
        builder1.setNegativeButton("No",
                new DialogInterface.OnClickListener() {
            public void onClick(DialogInterface dialog, int id) {
                dialog.cancel();
            }
        });

        AlertDialog alert11 = builder1.create();
        alert11.show();
}

if(condition inbetween){
//Do inbetween related stuff
}

}
}

但是,如果我尝试从没有实现Activity的类(在本例中为“MapRenderer”)调用对话框,这似乎会发出错误。 你能否确认像AlertDialog popup这样的动作需要这样的代码,因为看到sbove只能在扩展的类中编写 活动?

2 个答案:

答案 0 :(得分:1)

不可以,只要用于创建context的{​​{1}}对象有效且属于Dialog。我通常将Activity作为参数传递给我的帮助方法,然后在调用Activity之前检查dialog.show()

答案 1 :(得分:0)

您可以在任何地方书写它。请记住,在运行时它需要一个Activity来显示自己。因此,传递给构建器的上下文必须是具有Activity的上下文。