天天看點

android 中使用回調函數

1.定義callback類:

public abstract class AppCallback {

    public abstract void startCallback();

}

2.在觸發callback函數的地方定義:

private static AppCallback mClearAll = null;

并且定義注冊和移除callback的方法:

public static void registerCallback(AppCallback callback, int callBackId) {

        if (callBackId == AppConstants.ID_CALL_BACK_OK) {

            mFilterOk = callback;

        } else if (callBackId == AppConstants.ID_CALL_BACK_CANCEL) {

            mFilterCancel = callback;

        } else if (callBackId == AppConstants.ID_CALL_CLEAR) {

            mClearAll = callback;

        }

    }

    public static void removeCallback(AppCallback callback) {

        mClearAll = null;

        mFilterOk = null;

        mFilterCancel = null;

    }

觸發事件中調用callback函數:

if (mClearAll != null) {

                    mClearAll.startCallback();

                }

3.callback内的事務處理(一般和第二步不在一個類(activity)裡面,否則也不用使用callback):

首先在onResume中注冊callback:

public void onResume() {

        mShaker.resume();

        ResultPageOption.registerCallback(updateWithFilter, AppConstants.ID_CALL_BACK_OK);

        ResultPageOption.registerCallback(updateWithFilter, AppConstants.ID_CALL_CLEAR);

        ResultPageOption.registerCallback(filterCancel, AppConstants.ID_CALL_BACK_CANCEL);

        super.onResume();

    }

然後再onDestroy中銷毀callback:

public void onDestroy() {

        super.onDestroy();

        ResultPageOption.removeCallback(updateWithFilter);

    }

最後實作callback内要做什麼:

private AppCallback updateWithFilter = new AppCallback(){

        @Override

        public void startCallback() {

            clearAll();//要做的事

        }        

    };