1. 程式人生 > >[Android] 把function 傳入class 裡的方法

[Android] 把function 傳入class 裡的方法

在研究 seafileTaskDialog source code 時,發現一個有趣的寫程式小巧技,如何傳要執行的function 給某個 class.

下面的節錄重點的code:

Screenshot 2016-08-21 01.07.16

使用範例,在主程式這樣寫:

NewDialog dialog = new NewDialog();
dialog.init(message);
dialog.setTaskDialogLisenter(new TaskDialog.TaskDialogListener() {
    @Override
    public void onTaskSuccess() {
        //Your code here...
    }
});

在 class 裡這樣寫:

public void setTaskDialogLisenter(TaskDialogListener listener) {
    mListener = listener;
}

public static abstract class TaskDialogListener {
    public void onTaskSuccess() {
    }
    public void onTaskFailed(SeafException e) {
    }
    public void onTaskCancelled() {
    }
}


最後,在 class 的Task 成功或失敗時,都去呼叫一下 mListener

public void onTaskSuccess() {
    getDialog().dismiss();
    if (mListener != null) {
        mListener.onTaskSuccess();
    }
}

public void onTaskFailed(SeafException e) {
    hideLoading();
    showError(getErrorFromException(e));
    enableInput();
    if (mListener != null) {
        mListener.onTaskFailed(e);
    }
}