我在开发项目时经常遇到时间不长但又不短的耗时操作,只有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
分享到:
相关推荐
为了确保UI响应性,这类对话框通常会在一个新的线程中执行耗时任务,并通过事件回调机制来更新UI界面。 ##### 2. 使用到的关键技术 - **多线程**:在C#中,可以使用`System.Threading`命名空间下的`Thread`类来...
为了更新界面上的显示,我们可以为特定的消息(如`WM_COMMAND`)注册回调函数,当用户触发事件时,该函数会被调用并执行相应的处理逻辑。 此外,为了确保串口通信的可靠性和稳定性,我们还需要处理可能出现的错误,...
2. **监听关闭回调清除校验**:在`el-dialog`的关闭回调中,如`@closed`事件,执行清除校验的方法,如`clearValidate()`或`resetFields()`。这种方法可以确保对话框关闭时清理校验状态,但可能在某些情况下无法正常...
- `OnClose`:关闭事件处理,确保正确关闭socket和释放资源。 学习这个源码,你可以了解到如何在MFC对话框中集成网络功能,以及如何处理TCP连接的生命周期。同时,你还可以了解到如何处理网络通信中的异常,如连接...
此外,DsDialog支持绑定自定义事件,如对话框打开、关闭时触发的回调函数,这样开发者可以在特定时刻执行特定的业务逻辑。 在实际应用中,DsDialog通常与其他HTML5元素和CSS样式结合使用,以创建更复杂的交互场景。...
在MFC对话框中,可以设置控件(如文本框或列表视图)来实时显示发送和接收的数据,更新这些控件的状态通常会在Socket对象的`OnSend`和`OnReceive`事件回调中完成。 同步和异步Socket通信是两种不同的处理方式。同步...
要禁止WebBrowser组件弹出对话框,我们可以通过实现`IWebBrowser2`接口的事件处理来拦截JavaScript的警框。以下是一步一步的实现过程: 1. **创建一个新的组件**:首先,我们可以创建一个自定义的组件,继承自...
5. **事件处理**:组件支持点击蒙层关闭、点击确认按钮触发回调等功能,这使得开发者能够灵活地处理用户交互事件。 6. **兼容性**:由于Rodal是基于React构建的,所以它与React的其他库和框架有很好的兼容性,可以...
6. **回调函数**:提供了丰富的回调函数,如`onOpen`、`onClose`,便于处理用户交互后的逻辑。 7. **动画效果**:提供了平滑的过渡动画,增加用户体验。 8. **可访问性**:考虑了无障碍性(A11Y),确保键盘导航和...
它基于Windows API,提供了丰富的控件和事件处理机制,便于开发者构建功能完善的窗口应用。 创建加载等待界面的核心在于设计一个具有适当视觉效果的窗体,通常包括一个进度条、动画图标(如旋转的圆圈)以及一些...
6. **非阻塞特性**:使用jQueryAlert不会阻止浏览器的正常运行,用户可以在等待对话框响应的同时进行其他操作。 7. **兼容性**:由于基于jQuery,jQueryAlert通常具有良好的浏览器兼容性,支持大部分现代浏览器和...
在`CSocketSeverDlg`类定义中,需要定义Socket数组来存储与多个客户端连接的Socket,以及各种网络异步事件处理函数。消息映射中,定义了异步事件回调函数OnNetEvent,当接收到网络事件时,该函数会被调用。 初始化...
- `OnDismissListener`、`OnClickListener`等接口:定义了对话框的各种回调事件。 5. **优化与进阶** - **性能优化**:注意避免过度绘制,合理控制对话框的生命周期,提高应用的运行效率。 - **主题适配**:根据...
在对话框中,我们需要添加按钮事件处理程序,以便当用户点击“发送”按钮时,调用CSocket的Send()函数将输入的消息发送到对方。 此外,为了处理服务器和客户端之间的数据接收,我们需要在CSocket的OnReceive()回调...
4. **事件处理**:通过设置回调函数(Callback),`MakeDialog`可以响应用户的行为,例如当用户点击按钮时执行特定的代码。 5. **显示对话框**:最后,函数会显示这个自定义的对话框,等待用户的交互。 6. **处理...
在`SocketSeverDlg.cpp`文件中,添加消息映射,将`OnNetEvent`作为异步事件回调函数。`OnInitDialog()`中调用`InitNetwork()`函数初始化网络。 `InitNetwork()`函数包括如下步骤: 1. 使用`WSAStartup()`初始化TCP...
ASP.NET开发者可能会结合使用C#后端代码与前端JavaScript来触发弹出对话框的显示和处理回调。 3. **服务器端事件处理**:在ASP.NET中,控件通常有与其关联的服务器端事件,如`OnClick`或`OnLoad`。弹出对话框控件...
// 进入主循环,等待事件并调用相应的回调函数 return 0; } ``` 在这个例子中,`displayCallback`、`reshapeCallback`和`keyboardCallback`是你需要自定义的函数,分别处理画面重绘、窗口大小改变和键盘输入事件。...
这可以通过检查CSerialPort类的成员函数返回值,或者设置错误回调函数来实现。 最后,为了实现更高级的功能,如异步通信、多线程串口操作,你需要对Windows消息机制有深入理解。异步通信可以让程序在等待数据的同时...
本文将深入探讨基于WinAPI的基本窗口应用程序及其关键概念,特别关注窗口过程、回调函数、消息处理和消息循环等难点。 首先,窗口过程(WndProc)是WinAPI中的一个回调函数,它是程序员编写的,但由操作系统在适当...