[ Android ] 替自訂的Dialog設置監聽

Dialog有自己的事件監聽,例如onClick

但有些程式又不方便在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物件去一一派送事件

這部分我還要再找時間來試試看

大概就是這樣







沒有留言:

張貼留言

Layout疑難雜症筆記

 這裡記錄一些Layout時View元件比較特殊的狀況與處理方式,內容會陸續增加。