2012-03-23 128 views
0

我想在我的数据处理过程中锁定按钮。 我用的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解雇。 如何修改以避免它被解雇?

回答

5

您可以拨打progDailog.setCancelable(false);锁定后退按钮

5

你需要设置progDailog.setCancelable(false);您的对话框禁用硬件背按键

3

我相信你不想中断的AsyncTask后台进程。因此,根据您的代码,我可以建议在代码中进行一些修改,以便您的对话框将保留在那里,即使您按回了键。

你只需要设置对话框不可取消:

progDailog.setCancelable(false); 
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; 

}