窩在艾爾

【問題筆記】#Linux,#Android、#Java、#Python,#LineBot 【日常隨手分享】#吃 #喝 #玩 #樂

[Android] Callback 教學及實作

發布於
簡單Android Callback 教學及實作(含GitHub程式碼下載)

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();
接收到onError Callback後顯示onError Toast Message
接收到onSuccess Callback後顯示onSucess Toast Message


GitHub:

https://github.com/Ailefrom/EasyCallback


喜歡我的文章嗎?
別忘了給點支持與讚賞,讓我知道創作的路上有你陪伴。

CC BY-NC-ND 2.0 版權聲明
2

看不過癮?

一鍵登入,即可加入全球最優質中文創作社區