如何锁定后退按钮

时间:2012-03-23 09:04:20

标签: android

我希望在数据处理过程中锁定按钮。 我使用AsyncTask处理数据如下:

class Process extends AsyncTask<String, String, String> {
@Override
protected void onPreExecute() {
super.onPreExecute();
progDailog = new ProgressDialog(ShareFolderActivity.this.getParent());
progDailog.setMessage("Loading...");
progDailog.setIndeterminate(false);
progDailog.setMax(100);
progDailog.setProgressStyle(ProgressDialog.STYLE_SPINNER);
progDailog.setCancelable(true);
progDailog.show();
lock = true;
}
@Override
protected String doInBackground(String... aurl) {
//process
return null;
}
@Override
protected void onPostExecute(String unused) {
super.onPostExecute(unused);
PostLoad();
progDailog.dismiss();
lock = false;
}
}

以下onBackPressed():

@Override
public void onBackPressed() {
if(!lock) {
//back action
}
}

当按下doInBackground后退按钮时,后退动作不会执行,但progDailog会被忽略。 如何修改以避免它被解雇?

4 个答案:

答案 0 :(得分:5)

您可以致电progDailog.setCancelable(false);锁定按钮

答案 1 :(得分:5)

您需要为对话框设置progDailog.setCancelable(false);以禁用硬件后退键按钮

答案 2 :(得分:3)

我确定你不想中断AsyncTask后台进程。因此,根据您的代码,我可以建议您对代码进行一些修改,这样即使您按回键也会保留对话框。

您只需将对话框设置为不可取消:

progDailog.setCancelable(false);

答案 3 :(得分:1)

  @Override
  public boolean onKeyDown(int keyCode, KeyEvent event)  {
      if (Integer.valueOf(android.os.Build.VERSION.SDK) < 7 
        //Instead use android.os.Build.VERSION.SDK_INT < android.os.Build.VERSION_CODES.ECLAIR
        && keyCode == KeyEvent.KEYCODE_BACK
        && event.getRepeatCount() == 0) {
    // This may not work on older versions of platform where it doesn't exist.
    onBackPressed();
   }
   return super.onKeyDown(keyCode, event);
   }
 @Override
 public void onBackPressed() {

return;

}