[英]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.