看板 AndroidDev 關於我們 聯絡資訊
※ 引述《zxc190 (卡卡)》之銘言: : 今天我在一個A class有個 function : public static void ShowAlert(String msg,Activity activity){ : AlertDialog.Builder alert = new AlertDialog.Builder( activity ); : alert.setTitle(""); : alert.setMessage(msg); : alert.setPositiveButton("確定", new DialogInterface.OnClickListener() { : @Override : public void onClick(DialogInterface arg0, int arg1) { : } : }); : alert.show(); : } : 這樣以後我只想秀alert 就可以A.ShowAlert("訊息",Activity); : 現在問題來了 如果我想要在一些狀況下按完確定後可以另外做一些事情 : 我要如何Override按完後的function 其實很簡單,寫一個callback就解決惹 首先宣告一個interface public interface OnDialogListener{ public void OnDialogClick(); } 接著宣告一個變數 private OnDialogListener mOnDialogListener; 在宣告一個註冊的方法 public void setOnDialogListener(OnDialogListener listener){ mOnDialogListener = listener; } 然後就可以在這個類別使用它惹 假設你的類別是A類別 public class A{ public interface OnDialogListener{ public void OnDialogClick(); } private OnDialogListener mOnDialogListener; public void setOnDialogListener(OnDialogListener listener){ mOnDialogListener = listener; } public static void ShowAlert(String msg,Activity activity){ AlertDialog.Builder alert = new AlertDialog.Builder(activity); alert.setTitle(""); alert.setMessage(msg); alert.setPositiveButton("確定", new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface arg0, int arg1) { //當你按下確定以後 就會執行你想要執行的動作 //判斷是否有註冊 如果沒註冊就不用執行 if(mOnDialogListener != null){ mOnDialogListener.OnDialogClick(); } } }); alert.show(); } } 好了 接著就是怎麼使用A類別這個callback 假設現在有一個B類別 class B { private A a; public B(){ a = new A(); a.setOnDialogClickListener(new OnDialogClickListener(){ public void OnDialogClick(){ //就是在這邊執行當你按下確定的時候想做的事情 } }); } } 這樣就是一個簡單的callback 但是只有對一個註冊有效 後面還有很多變化 例如可以獨立出一個類別專門讓人在註冊 當所有註冊的物件 在某些事情發生變化的時候 就可以群體通知 當然android你也可以用廣播來完成 (如果需要我在寫一個範例for多個註冊的) 這也是一種設計模式 叫做"觀察者模式" ps. 程式碼沒跑過 可能有那裡漏掉 再告知 謝謝 -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 118.163.25.228 ※ 文章網址: http://www.ptt.cc/bbs/AndroidDev/M.1410759030.A.D92.html
zxc190: 感謝指導! 09/15 14:19
zxc190: 實做出來了 感謝! 只是我function是宣告成static 09/15 14:50
zxc190: 所以變量也要是static 沒處理好會變成按確定都做那件事 09/15 14:52
zxc190: 看來得把static拿掉每次都new比較安全了 再次謝謝 09/15 14:52