[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);
    }
}

source code:
https://github.com/haiwen/seadroid/blob/master/app/src/main/java/com/seafile/seadroid2/ui/dialog/TaskDialog.java

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *