但有些程式又不方便在Dialog的類別裡頭用
這時候就是監聽Callback登場的時候啦!
設置Dialog的監聽回傳其實很簡單
也就只是把畫面上的事件告知給Activity或者Fragment知道而已
依照底下幾個步驟
1. 在自訂的Dialog類別裡頭自己新增一個 Listener 介面
例如下列程式碼 ( 示範而已 )
public interface MyDialogListener{
void onCancel();
}
2. 在Dialog類別裡頭新增一個setter,用來設置listener
private MyDialogListener listener;
public void setListener(MyDialogListener l){
this.listener = l;
}
3. 在指定的時機呼叫 listener 的方法,例如在使用者按下Dialog的Cancel按鈕時
cancel.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if(listener != null)
listener.onCancel();
}
});
4. 在Activity或者Fragment實作Dialog,如下
MyDialog dialog = new MyDialog();
dialog.setListener(new NMyDialog.MyDialogListener() {
@Override
public void onCancel() {
// 當接收到callback想執行的事情
}
});
dialog.show(getFragmentManager(), "");
其實類似的用途很廣,不一定要用在Dialog上面
會拿Dialog來解釋是因為在使用上與程式碼的邏輯上比較直接 ( 個人感覺 )
不過使用上還算是比較簡便的方式
倘若要設定監聽的對象比較多
那setter裏頭就要用一個集合物件來裝載Listener
當事件發生需要派發時則透過iterator物件去一一派送事件
這部分我還要再找時間來試試看
大概就是這樣
沒有留言:
張貼留言