簡體   English   中英

如何在Java中調用匿名內部類

[英]How to call anonymous inner class in java

在代碼中,有一個警報框(用於注銷功能)。 在一個方法(即注銷方法)內部創建此警報框,然后將兩個onClickListener匿名添加到其中。 我如何從外部呼叫這些匿名偵聽器?

碼:

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

我需要以某種方式調用此onClick方法並傳遞同一對話框的實例。 我已經閱讀了使用反射進行此操作的示例,但是在這些示例中,匿名類是一個子類,即捕獲了“ new”的返回值

您可以將偵聽器設置為字段變量。

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

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

如果沒有該對象的任何引用,則無法調用它。
您可以執行以下操作:

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。 匿名類聲明了解更多詳細信息。

您有兩種選擇:

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,但如果是,則可以嘗試從構建器中提取偵聽器實現。 偽代碼應如下所示:

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM