2012-03-23 138 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; 

}