今天,讲讲使用handle显示加载框,当任务完成后,隐藏加载框。
第一种代码:
1. 定义常量和加载框 private final static int SEARCH_PREPARE = 100; private final static int SEARCH_FINISHED = 120; private Dialog exitDialog;
2.定义handle变量 private Handler handler = new Handler() {
@Override public void handleMessage(Message msg) { super.handleMessage(msg); switch (msg.what) { /* 隐藏+号 显示进度条 */ case SEARCH_PREPARE: { if (exitDialog == null) { //显示一个加载框 exitDialog = new Dialog(mContext, R.style.CommonDialogStyle); exitDialog.setContentView(R.layout.dialog_layout); exitDialog.getWindow().setBackgroundDrawableResource(R.color.cache); exitDialog.setCancelable(false); } exitDialog.show();
if (edts.getText().toString().equals("P6S")){ handler.postDelayed(new Runnable() { @Override public void run() { if (exitDialog.isShowing()) { handler.sendEmptyMessage(SEARCH_FINISHED); } } }, 10 * 1000); }else { handler.postDelayed(new Runnable() { @Override public void run() { if (exitDialog.isShowing()) { handler.sendEmptyMessage(SEARCH_FINISHED); } } }, 5 * 1000); }
}
break; /* 隐藏进度条 */ case SEARCH_FINISHED: {
if (exitDialog.isShowing()) { Toast.makeText(mContext,R.string.channel_request_timeout,Toast.LENGTH_LONG).show(); exitDialog.dismiss(); } } break; } } };
3.使用时直接调用代码handler.sendEmptyMessage(SEARCH_PREPARE);这样,如果任务完成自己取消加载框。如果没有完成,5秒后也会自己取消加载框。
第二种代码: 第一种代码有个缺点,当多次请求时,第一次的5秒后的判断加载框显示会与后面的冲突,导致逻辑出现错误。第一种代码只适合不连续显示加载框的时候可以调用。
1. 定义常量和加载框 private final static int SEARCH_PREPARE = 100; private final static int SEARCH_FINISHED = 120; private Dialog exitDialog;
2.定义handle变量 private Handler handler = new Handler() {
@Override public void handleMessage(Message msg) { super.handleMessage(msg); switch (msg.what) { /* 隐藏+号 显示进度条 */ case ADD_PREPARE: { if (exitDialog == null) { //显示一个加载框 exitDialog = new Dialog(DeviceAddActivity.this, R.style.CommonDialogStyle); exitDialog.setContentView(R.layout.dialog_layout); exitDialog.getWindow().setBackgroundDrawableResource(R.color.cache); exitDialog.setCancelable(false); } exitDialog.show(); handler.postDelayed(runnable, 5 * 1000); } break; /* 隐藏进度条 */ case ADD_FINISHED: { if (exitDialog.isShowing()) { exitDialog.dismiss(); } } } } };
3定义runnable变量 private Runnable runnable=new Runnable() { @Override public void run() { if (exitDialog.isShowing()) { handler.sendEmptyMessage(ADD_FINISHED); } } };
4.使用时直接调用代码handler.sendEmptyMessage(SEARCH_PREPARE); 这样,如果任务完成自己取消加载框。并且移除runnable。具体代码: if (exitDialog != null && exitDialog.isShowing()) { exitDialog.dismiss(); handler.removeCallbacks(runnable); //去掉此次的加载框的监听 } 如果没有完成,5秒后也会自己取消加载框。
android 使用handle显示加载框就讲完了。
就这么简单。