当进行耗时的操作时,就会写个进度条在界面上运行。但是按返回键,搜索键时,进度条会消失,但是耗时的操作还在进行中,怎么办呢?
进度条:ProgressDialog dialog;
1. 异步加载进度条屏蔽返回键很简单,只要设置dialog.setCancelable(false);即可。
2. 可是屏蔽搜索键没有现成的东西。
想法一,重写onKeyDown函数:
- 定义个boolean boo = flase,在耗时操作中设置 boo = true;操作完成设置boo = flase;
- 重写onKeyDown:
- public boolean onKeyDown(int keyCode, KeyEvent event) {
- switch (keyCode) {
- case KeyEvent.KEYCODE_SEARCH: {
- if(boo){
- return true;
- }else{
- break;
- }
- }
- return super.onKeyDown(keyCode, event);
- }
定义个boolean boo = flase,在耗时操作中设置 boo = true;操作完成设置boo = flase;
重写onKeyDown:
public boolean onKeyDown(int keyCode, KeyEvent event) {
switch (keyCode) {
case KeyEvent.KEYCODE_SEARCH: {
if(boo){
return true;
}else{
break;
}
}
return super.onKeyDown(keyCode, event);
}
运行发现此法不可行,按搜索键,搜索功能屏蔽了,但进度条还是消失了。
原来异步加载进度条后,进度条获取了焦点,而onKeyDown是屏幕的,不是进度条的。so
- dialog.setOnKeyListener(new DialogInterface.OnKeyListener(){
- public boolean onKey(DialogInterface dialog, int keyCode,KeyEvent event) {
- if (keyCode == KeyEvent.KEYCODE_SEARCH) {
- return true;
- }
- return false;
- }
- });
dialog.setOnKeyListener(new DialogInterface.OnKeyListener(){
public boolean onKey(DialogInterface dialog, int keyCode,KeyEvent event) {
if (keyCode == KeyEvent.KEYCODE_SEARCH) {
return true;
}
return false;
}
});
即可。