我希望在数据处理过程中锁定按钮。 我使用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会被忽略。 如何修改以避免它被解雇?
答案 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;
}