如何在java中调用匿名内部类

时间:2015-04-21 10:32:13

标签: java android

在代码中,有一个警告框(用于注销功能)。 此警报框在方法(即注销方法)中创建,然后匿名添加两个onClickListener。 我怎样才能从外面打电话给这些匿名听众?

代码:

AlertDialog.Builder builder
builder.setPositiveButton("Yes", new DialogInterface.OnClickListener(){
   public void onClick(DialogInterface dialog, int id) {
      //some logic
   }
}

我需要的是以某种方式调用此onClick方法并传递相同对话框的实例。 我已经阅读了使用反射执行此操作的示例,但在这些示例中,匿名类是一个子类,即返回值为' new'被抓住了

3 个答案:

答案 0 :(得分:2)

您可以将侦听器变为字段变量。

private final DialogInterface.OnClickListener dialogYesListener = new DialogInterface.OnClickListener() {
   public void onClick(DialogInterface dialog, int id) {
      //some logic
   }
};

AlertDialog.Builder builder
builder.setPositiveButton("Yes", dialogYesListener);

答案 1 :(得分:0)

如果您没有该对象的任何引用,则无法调用它 你可以这样做:

AlertDialog.Builder builder
DialogInterface.OnClickListener listener = new DialogInterface.OnClickListener(){
   public void onClick(DialogInterface dialog, int id) {
      //some logic
   }
builder.setPositiveButton("Yes", listener);
}
// now you can call function on if like
listener.SomeFunction()

有关详细信息,请参阅JLS 15.9.5. Anonymous Class Declarations

答案 2 :(得分:0)

您有两种选择:

1)重构您的代码以引用DialogInterfact.OnClickListener的实例,如下所示:

AlertDialog.Builder builder;
DialogInterface.OnClickListener listener = new DialogInterface.OnClickListener() {
    public void onClick(DialogInterface dialog, int id) {
         //some logic
    }
}


builder.setPositiveButton("Yes", listener);

2)我不知道是否有这样的API,但如果是,您可以尝试从构建器中提取侦听器实现。 Pseudocode 应如下所示:

DialogInterface.OnClickListener listener =
   builder.getPositiveButton().getListener(); //adjust this to a real API