1. 程式人生 > >Dialog向Activity傳遞資料

Dialog向Activity傳遞資料

本文出處:http://superonion.iteye.com/blog/1418467

我們知道,從一個Activity向另一個Activity傳遞資料,用Intent實現。而當一個浮在Activity之上的Dialog需要向該Activity傳遞資料時,應該怎麼實現呢?接著上一篇文章:用Dialog建立帶箭頭的對話方塊。 
       現在PopupDialog中宣告一個內部介面PriorityListener,介面中宣告一個回撥函式refreshPriorityUI,用於在Dialog的監聽事件觸發後重新整理Activity的UI顯示。然後在MainActivity中的Button點選事件中實現這個介面並將其作為PopupDialog的建構函式的引數傳入,並實現refreshPriorityUI()方法。話不多說,直接上程式碼—— 
     PopupDialog程式碼: 

Java程式碼  收藏程式碼
  1. public class PopupDialog extends Dialog {  
  2.     /** 
  3.      * 自定義Dialog監聽器 
  4.      */  
  5.     public interface PriorityListener {  
  6.         /** 
  7.          * 回撥函式,用於在Dialog的監聽事件觸發後重新整理Activity的UI顯示 
  8.          */  
  9.         public void refreshPriorityUI(String string);  
  10.     }  
  11.     private PriorityListener listener;  
  12.     /** 
  13.      * 帶監聽器引數的建構函式 
  14.      */  
  15.     public PopupDialog(Context context, int theme, PriorityListener listener) {  
  16.         super(context, theme);  
  17.         this.listener = listener;  
  18.     }  
  19.     protected void onCreate(Bundle savedInstanceState) {  
  20.         super.onCreate(savedInstanceState);  
  21.         setContentView(R.layout.popup_dialog);  
  22.         Button buttonUp = (Button) findViewById(R.id.btn_up);  
  23.         buttonUp.setOnClickListener(new Button.OnClickListener() {  
  24.             @Override  
  25.             public void onClick(View v) {  
  26.                 dismiss();  
  27.                 listener.refreshPriorityUI("資料來自:上");                 
  28.             }  
  29.         });  
  30.     }  
  31. }  



     MainActivity程式碼: 

Java程式碼  收藏程式碼
  1. public class MainActivity extends Activity {  
  2.     @Override  
  3.     public void onCreate(Bundle savedInstanceState) {  
  4.         super.onCreate(savedInstanceState);  
  5.         setContentView(R.layout.main);  
  6.         Button button = (Button)findViewById(R.id.btn);  
  7.         button.setOnClickListener(new OnClickListener() {  
  8.             @Override  
  9.             public void onClick(View v) {  
  10.                 PopupDialog popupDialog = new PopupDialog(MainActivity.this, R.style.dialog, new PopupDialog.PriorityListener() {  
  11.                     @Override  
  12.                     public void refreshPriorityUI(String string) {  
  13.                         Toast.makeText(MainActivity.this, string, Toast.LENGTH_SHORT).show();  
  14.                     }  
  15.                 });  
  16.                 popupDialog.setCanceledOnTouchOutside(true); // 點選Dialog之外的區域對話方塊消失  
  17.                 Window window = popupDialog.getWindow();  
  18.                 WindowManager.LayoutParams lp = window.getAttributes();  
  19.                 lp.y = -64; // 設定豎直方向的偏移量  
  20.                 lp.dimAmount = 0f; // 彈出對話方塊的時候背景不變暗  
  21.                 popupDialog.show();  
  22.             }  
  23.         });  
  24.     }