/** * 自定義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>