`
Function
  • 浏览: 64006 次
  • 性别: Icon_minigender_1
  • 来自: 南京
社区版块
存档分类
最新评论

基于回调的等待对话框事件处理

阅读更多
我在开发项目时经常遇到时间不长但又不短的耗时操作,只有2,3秒的样子,最好是弹出体格等待的对话框,以便用户友好交互,于是,写了一个辅助类,来控制所有等待对话框的显示,基于回调来处理耗时的事件,下面是辅助类的代码:
public class ProgressDialogHelper {
	//
	private Context mContext;
	// 等带对话框的标题
	private String mTitle;
	// 等待内容
	private String mMessage;
	// show
	private final int SHOW = 1;
	// dismiss
	private final int DISMISS = 0;

	public ProgressDialogHelper(Context mContext) {
		this.mContext = mContext;
	}

	// 控制进度对话框的显示与消失
	private Handler handler = new Handler() {
		@Override
		public void handleMessage(Message msg) {
			switch (msg.what) {
			case SHOW:
				progressDialog = ProgressDialog
						.show(mContext, mTitle, mMessage);
				break;
			case DISMISS:
				progressDialog.dismiss();
				break;
			}
		}
	};
	// 进度对话框
	private ProgressDialog progressDialog = null;

	/**
	 * 启用进度对话框
	 * 
	 * @param title
	 *            进度框的标题
	 * @param message
	 *            进度框显示的内容
	 * @param callBack
	 *            回调的执行方法
	 */
	public void showProgressDialog(String title, String message,
			final ProgressCallBack callBack) {
		this.mTitle = title;
		this.mMessage = message;
		handler.sendEmptyMessage(SHOW);// 弹出对话框
		new Thread() {
			public void run() {
				callBack.action();// 执行操作
				handler.sendEmptyMessage(DISMISS);// 执行完毕,关闭对话框
			}
		}.start();
	}

	// 要在进度对话框显示时执行的操作
	public interface ProgressCallBack {
		public void action();
	}

}

注释,都写的很清晰了,下面来看看如何使用这个辅助工具:
new ProgressDialogHelper(this).showProgressDialog("添加商品",
					"正在提交商品信息", new ProgressCallBack() {
						public void action() {
							try {
								// 模拟提交的耗时操作或调用别的方法
								Thread.sleep(3000);
							} catch (InterruptedException e) {
								e.printStackTrace();
							}
						}
					});

这个有点长,但是还算便于理解.下面贴两张图来看效果:





写码笔记-欢迎交流


  • 大小: 4.6 KB
  • 大小: 9.2 KB
分享到:
评论
1 楼 天使在堕落 2014-09-14  
学习了,项目正用到这个功能

相关推荐

    C# winform 实现弹出的等待对话框实例

    为了确保UI响应性,这类对话框通常会在一个新的线程中执行耗时任务,并通过事件回调机制来更新UI界面。 ##### 2. 使用到的关键技术 - **多线程**:在C#中,可以使用`System.Threading`命名空间下的`Thread`类来...

    WIN32 API实现基于对话框的串口通信呈现

    为了更新界面上的显示,我们可以为特定的消息(如`WM_COMMAND`)注册回调函数,当用户触发事件时,该函数会被调用并执行相应的处理逻辑。 此外,为了确保串口通信的可靠性和稳定性,我们还需要处理可能出现的错误,...

    基于element-ui对话框el-dialog初始化的校验问题解决

    2. **监听关闭回调清除校验**:在`el-dialog`的关闭回调中,如`@closed`事件,执行清除校验的方法,如`clearValidate()`或`resetFields()`。这种方法可以确保对话框关闭时清理校验状态,但可能在某些情况下无法正常...

    基于对话框编写的TCP服务器客户端程序源码

    - `OnClose`:关闭事件处理,确保正确关闭socket和释放资源。 学习这个源码,你可以了解到如何在MFC对话框中集成网络功能,以及如何处理TCP连接的生命周期。同时,你还可以了解到如何处理网络通信中的异常,如连接...

    jQuery对话框插件DsDialog.zip

    此外,DsDialog支持绑定自定义事件,如对话框打开、关闭时触发的回调函数,这样开发者可以在特定时刻执行特定的业务逻辑。 在实际应用中,DsDialog通常与其他HTML5元素和CSS样式结合使用,以创建更复杂的交互场景。...

    socket通信,对话框显示接受情况

    在MFC对话框中,可以设置控件(如文本框或列表视图)来实时显示发送和接收的数据,更新这些控件的状态通常会在Socket对象的`OnSend`和`OnReceive`事件回调中完成。 同步和异步Socket通信是两种不同的处理方式。同步...

    Delphi禁止WebBrowser弹出IE的对话框

    要禁止WebBrowser组件弹出对话框,我们可以通过实现`IWebBrowser2`接口的事件处理来拦截JavaScript的警框。以下是一步一步的实现过程: 1. **创建一个新的组件**:首先,我们可以创建一个自定义的组件,继承自...

    React-rodal一个带动画的React模式对话框

    5. **事件处理**:组件支持点击蒙层关闭、点击确认按钮触发回调等功能,这使得开发者能够灵活地处理用户交互事件。 6. **兼容性**:由于Rodal是基于React构建的,所以它与React的其他库和框架有很好的兼容性,可以...

    漂亮的jQuery模态消息对话框插件SweetAlert2.zip

    6. **回调函数**:提供了丰富的回调函数,如`onOpen`、`onClose`,便于处理用户交互后的逻辑。 7. **动画效果**:提供了平滑的过渡动画,增加用户体验。 8. **可访问性**:考虑了无障碍性(A11Y),确保键盘导航和...

    winform加载等待界面

    它基于Windows API,提供了丰富的控件和事件处理机制,便于开发者构建功能完善的窗口应用。 创建加载等待界面的核心在于设计一个具有适当视觉效果的窗体,通常包括一个进度条、动画图标(如旋转的圆圈)以及一些...

    jQueryAlert

    6. **非阻塞特性**:使用jQueryAlert不会阻止浏览器的正常运行,用户可以在等待对话框响应的同时进行其他操作。 7. **兼容性**:由于基于jQuery,jQueryAlert通常具有良好的浏览器兼容性,支持大部分现代浏览器和...

    Winsock开发网络通信程序的经典入门

    在`CSocketSeverDlg`类定义中,需要定义Socket数组来存储与多个客户端连接的Socket,以及各种网络异步事件处理函数。消息映射中,定义了异步事件回调函数OnNetEvent,当接收到网络事件时,该函数会被调用。 初始化...

    dialogplus-master

    - `OnDismissListener`、`OnClickListener`等接口:定义了对话框的各种回调事件。 5. **优化与进阶** - **性能优化**:注意避免过度绘制,合理控制对话框的生命周期,提高应用的运行效率。 - **主题适配**:根据...

    基于CSocket的TCP聊天程序

    在对话框中,我们需要添加按钮事件处理程序,以便当用户点击“发送”按钮时,调用CSocket的Send()函数将输入的消息发送到对方。 此外,为了处理服务器和客户端之间的数据接收,我们需要在CSocket的OnReceive()回调...

    matlab开发-MakeDialog

    4. **事件处理**:通过设置回调函数(Callback),`MakeDialog`可以响应用户的行为,例如当用户点击按钮时执行特定的代码。 5. **显示对话框**:最后,函数会显示这个自定义的对话框,等待用户的交互。 6. **处理...

    vc网络编程入门,新手请进

    在`SocketSeverDlg.cpp`文件中,添加消息映射,将`OnNetEvent`作为异步事件回调函数。`OnInitDialog()`中调用`InitNetwork()`函数初始化网络。 `InitNetwork()`函数包括如下步骤: 1. 使用`WSAStartup()`初始化TCP...

    ASP.NET弹出对话框popUp控件源码及示例

    ASP.NET开发者可能会结合使用C#后端代码与前端JavaScript来触发弹出对话框的显示和处理回调。 3. **服务器端事件处理**:在ASP.NET中,控件通常有与其关联的服务器端事件,如`OnClick`或`OnLoad`。弹出对话框控件...

    freeglut.lib和所需要的头文件

    // 进入主循环,等待事件并调用相应的回调函数 return 0; } ``` 在这个例子中,`displayCallback`、`reshapeCallback`和`keyboardCallback`是你需要自定义的函数,分别处理画面重绘、窗口大小改变和键盘输入事件。...

    VC++串口编程之基于控件

    这可以通过检查CSerialPort类的成员函数返回值,或者设置错误回调函数来实现。 最后,为了实现更高级的功能,如异步通信、多线程串口操作,你需要对Windows消息机制有深入理解。异步通信可以让程序在等待数据的同时...

    基本WinAPI窗口应用程序分析

    本文将深入探讨基于WinAPI的基本窗口应用程序及其关键概念,特别关注窗口过程、回调函数、消息处理和消息循环等难点。 首先,窗口过程(WndProc)是WinAPI中的一个回调函数,它是程序员编写的,但由操作系统在适当...

Global site tag (gtag.js) - Google Analytics