Dialog向Activity傳遞資料
阿新 • • 發佈:2019-02-07
本文出處:http://superonion.iteye.com/blog/1418467
我們知道,從一個Activity向另一個Activity傳遞資料,用Intent實現。而當一個浮在Activity之上的Dialog需要向該Activity傳遞資料時,應該怎麼實現呢?接著上一篇文章:用Dialog建立帶箭頭的對話方塊。
現在PopupDialog中宣告一個內部介面PriorityListener,介面中宣告一個回撥函式refreshPriorityUI,用於在Dialog的監聽事件觸發後重新整理Activity的UI顯示。然後在MainActivity中的Button點選事件中實現這個介面並將其作為PopupDialog的建構函式的引數傳入,並實現refreshPriorityUI()方法。話不多說,直接上程式碼——
PopupDialog程式碼:
- public class PopupDialog extends Dialog {
- /**
- * 自定義Dialog監聽器
- */
- public interface PriorityListener {
- /**
- * 回撥函式,用於在Dialog的監聽事件觸發後重新整理Activity的UI顯示
- */
- public void refreshPriorityUI(String string);
- }
- private PriorityListener listener;
- /**
- * 帶監聽器引數的建構函式
- */
- public PopupDialog(Context context, int theme, PriorityListener listener) {
- super(context, theme);
- this.listener = listener;
- }
- protected void onCreate(Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
- setContentView(R.layout.popup_dialog);
- Button buttonUp = (Button) findViewById(R.id.btn_up);
- buttonUp.setOnClickListener(new Button.OnClickListener() {
- @Override
- public void onClick(View v) {
- dismiss();
- listener.refreshPriorityUI("資料來自:上");
- }
- });
- }
- }
MainActivity程式碼:
- public class MainActivity extends Activity {
- @Override
- public void onCreate(Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
- setContentView(R.layout.main);
- Button button = (Button)findViewById(R.id.btn);
- button.setOnClickListener(new OnClickListener() {
- @Override
- public void onClick(View v) {
- PopupDialog popupDialog = new PopupDialog(MainActivity.this, R.style.dialog, new PopupDialog.PriorityListener() {
- @Override
- public void refreshPriorityUI(String string) {
- Toast.makeText(MainActivity.this, string, Toast.LENGTH_SHORT).show();
- }
- });
- popupDialog.setCanceledOnTouchOutside(true); // 點選Dialog之外的區域對話方塊消失
- Window window = popupDialog.getWindow();
- WindowManager.LayoutParams lp = window.getAttributes();
- lp.y = -64; // 設定豎直方向的偏移量
- lp.dimAmount = 0f; // 彈出對話方塊的時候背景不變暗
- popupDialog.show();
- }
- });
- }
- }