不能在静态上下文活动中使用它

时间:2014-07-16 14:32:20

标签: java android android-alertdialog

我正在尝试实现一个显示alertdialog的新类,但是当我将代码从原始活动移动到另一个类以在应用程序中的任何位置实现它时,它在alertDialog.builder行中显示(不能在静态上下文)

public class showDialog {

static final String[] items = {"Facebook" ,"flicker" , "Google"};
static boolean[] itemsChecked = new boolean[items.length] ;

public static void main(String[] args) {
    AlertDialog.Builder builder=new AlertDialog.Builder(this);

当我尝试更改它以参考我想要的活动时

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

它说(在范围内无法访问MainActivity类型的eclosing实例)

解决方案是什么?

2 个答案:

答案 0 :(得分:0)

你在课堂上,显然它不是Activity。要构建AlertDialog,您需要Context

  • this不是Activity,因此它不是Context
  • MainActivity.this也不是Context

您需要使用类似Context类型的参数调用此函数。

在您的班级

public void showAlertDialog(Context ctx) {
    // SOME CODE
    AlertDialog.Builder builder=new AlertDialog.Builder(ctx);
    // SOME CODE
}

在您的活动中

myClass.showAlertDialog(this);

答案 1 :(得分:0)

错误原因

您将无法使用Activity2.this访问活动1中的其他活动(活动2)的上下文。

要跨活动访问对话框警报类,您应该将活动上下文传递给警报对话框类。

<强> 实施例

假设

显示对话框的类 - myclass

喜欢显示对话框的活动 - 活动1,活动2

实施

myClass(Context theContext,...)和

在Activity1和Activity2中

myClass(this,...);