/** * 自定义Dialog监听器 * @author Kael.Chen * */ public interface PriorityListener { /** * 回调函数,用于在Dialog的监听事件触发后刷新Activity的UI显示 */ public void refreshPriorityUI(); }
二、为自定义Dialog增长带监听器参数的构造函数:android
private PriorityListener listener; public PriorityDlg(Context context) { super(context); this.context = context; // TODO Auto-generated constructor stub } public PriorityDlg(Context context, int theme) { super(context, theme); this.context = context; } public PriorityDlg(Context context, int theme, PriorityListener listener) { this(context, theme); this.listener = listener; }
三、在Dialog中须要的地方去调用回调函数,好比在ListView的选择事件触发时:ide
dlg_priority_lvw.setOnItemClickListener(new AdapterView.OnItemClickListener() { @Override public void onItemClick(AdapterView<?> arg0, View arg1, int arg2, long arg3) { dismiss(); listener.refreshPriorityUI(); } });
四、而后你在Activity中使用带监听器参数的构造函数去实例化自定义Dialog,并实现监听器中声明的回调函数就能够了:函数
//为优先级选择按钮增长监听器 task_simple_form_priority.setOnClickListener(new OnClickListener() { @Override public void onClick(View arg0) { //弹出任务优先级选择对话框 PriorityDlg dlg = new PriorityDlg(SimpleTaskActivity.this, R.style.dlg_priority, new PriorityDlg.PriorityListener() { @Override public void refreshPriorityUI() { //这里就是用来刷新Activity的UI显示的,若是你须要用到从Dialog传回的数据,你能够把该数据存储在全局变量中或者做为回调函数的参数传递进来 Toast.makeText(SimpleTaskActivity.this, "完成选择", Toast.LENGTH_SHORT).show(); } }); dlg.show(); } });
解析(建立自定义对话框):this
PriorityDlg dlg = new PriorityDlg(SimpleTaskActivity.this, R.style.dlg_priority); return dlg;
R.style.dlg_priority设置了对话框使用的样式文件,只是让对话框去掉标题栏,固然你也能够经过代码来完成这种效果:spa
<?xml version="1.0" encoding="utf-8"?>
<resources>
<!-- 对话框样式 -->
<style name="dlg_priority" parent="@android:Theme.Dialog">
<item name="android:windowNoTitle">true</item></style></resources>