[Android] Callback 教學及實作
Callback 是很常見的回調功能
當資料有需要更新的時候,
通知Application進行更新
雖然也可以在Application層開Thread進行Monitor動作,
但是筆者認為這樣會增加Debug的困難度。
在開發上盡量減少Application複雜度,
不然常常跑出奇怪的bug(攤手)
廢話不多說
馬上來進行Callback實作吧
首先創建interface Callfun (名稱可自行定義,例如Callbackfun之類)
public interface Callfun {
    public void onSuccess();
    public void onError();
}
然後創建onSuccess()和onError()的function
這是用來傳遞和接收Callback的Function
Callback函式就定義完成囉!
接下來在要接收Callback的地方implements Callfun
public class CallbackActivity extends AppCompatActivity implements Callfun{
......
    @SuppressLint("WrongConstant")
@Override
public void onSuccess() {
    Log.d(TAG, "CallbackApi Receive onSuccess: ");
    Toast.makeText(this, "onSuccess", duration).show();
}
@SuppressLint("WrongConstant")
@Override
public void onError() {
    Log.d(TAG, "CallbackApi Receive onError: ");
    Toast.makeText(this, "onError", duration).show();
}
}
implements Callfun之後,按下Alt+Enter
會自動出現上方的onSuccess()和onError()的function
當Callback回傳onSuccess或onError時
就會在這裡接收到訊息
接收Callback的地方也完成囉~
最後一步就是調用Callfun來測試Callback是否正確
新增CallbackApi類別來調用Callfun做onSuccess()和onError()的回傳
public class CallbackApi {
    private static final String TAG = "CallbackApi";
    public Callfun mCallback;
    public Context mContext;
    public CallbackApi(Context context){
        this.mContext = context;
        mCallback = (Callfun) mContext;
    }
    public void onApiSuccess()
    {
        mCallback.onSuccess();
    }
    public void onApiError()
    {
        mCallback.onError();
    }
}
完成後只要再設定Callback觸發的情況
回到CallbackActivity中
在setOnClickListener()中觸發CallbackApi進行回調mCallback.onSuccess()
和mCallback.onError()
//////////////////////////////////////////////////////////////////////
        TextView success = (TextView) findViewById(R.id.resultPass);
success.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View v) {
        Log.d(TAG, "onClick: CallbackApi send success");
        mCallbackApi.onApiSuccess();
    }
});
TextView error = (TextView) findViewById(R.id.resultError);
error.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View v) {
        Log.d(TAG, "onClick: CallbackApi send error");
        mCallbackApi.onApiError();
    }
});
//////////////////////////////////////////////////////////////////////
CallbackActivity 就會收到 onSuccess 或是 onError 的Toast Message
Toast.makeText(this, "onSuccess", duration).show(); Toast.makeText(this, "onError", duration).show();
      
      GitHub:
https://github.com/Ailefrom/EasyCallback
