Dialog向Activity传递数据

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();
            }
        });
    }
}

最后效果:

点击“上”之后,MainActivity会调用refreshPriorityUI()方法:

原文地址:https://www.cnblogs.com/zhujiabin/p/4191301.html