0
我是Android的新手,我有一些與AsyncTask類的問題。我有很多(超過100個)複選框,我想選擇或取消選中「全選」複選框。 不幸的是,這需要相當長的時間,對於用戶來說很明顯,所以我想使用ProgressDialog來顯示正在進行的選擇。Android的ProgressDialog,同時選擇和取消選擇複選框使用AsyncTask
現在我知道UI元素的更新應該在UI線程中完成,因此我在onProgressUpdate方法中選擇了代碼,但ProgressDialog直到處理時才顯示出來(選中或取消選中所有複選框)已完成...
這應該怎麼做?有沒有解決方法或其他解決方案?我也嘗試通過doInBackground()方法中的所有複選框,但我得到了很多奇怪的錯誤(我猜這是因爲UI)。
這是我的代碼:
customPref.setOnPreferenceChangeListener(new OnPreferenceChangeListener() {
@Override
public boolean onPreferenceChange(final Preference preference, final Object object) {
new CbSelection().execute(preference);
return true;
}
});
private class CbSelection extends AsyncTask<Preference, Boolean, Void> {
private ProgressDialog Dialog = new ProgressDialog(Preferences.this);
@Override
protected void onPreExecute() {
Dialog.setMessage("Please wait...");
Dialog.setCanceledOnTouchOutside(true);
Dialog.setCancelable(true);
Dialog.show();
}
@Override
protected Void doInBackground(Preference... pref) {
PreferenceScreen screen = (PreferenceScreen)getPreferenceScreen().getRootAdapter().getItem(2);
Preference preference = pref[0];
if(preference.getKey().compareTo("select_all") == 0){
publishProgress(true);
}
return null;
}
@Override
protected void onProgressUpdate(Boolean... ok) {
if(ok[0]== true) {
PreferenceScreen screen = (PreferenceScreen)getPreferenceScreen().getRootAdapter().getItem(2);
for(int i = 0; i < screen.getPreferenceCount(); ++i) {
//Dialog.show();
/* select or deselect all checkboxes here... */
}
}
}
@Override
protected void onPostExecute(Void v) {
Dialog.cancel();
}
}
仍然一樣... ProgressDialog在處理完成時顯示。 – AndroidNewbie 2011-02-13 13:21:36