我有一個導航抽屜,打開幾個片段,其中一個執行後臺任務使用AsyncTask加載一些數據,同時顯示一個ProgressDialog。顯示ProgressDialog,同時打開新的片段和AsyncTask
這裏的問題是ProgressDialog「幾乎」未顯示。我說「幾乎」,因爲它顯示,但只有很短的時間。
我想實現的是:點擊Navigation Drawer項,關閉Navigation Drawer,顯示ProgressDialog,用AsyncTask打開Fragment,做背景數據,關閉ProgressDialog,看數據。
它在做什麼,此刻是:點擊抽屜式導航項,被凍結,關閉導覽,展示&解僱ProgressDialog非常快,看到的數據。
我不知道它爲什麼這樣做,肯定是我沒有得到的。這裏是我的代碼:
MainActivity:
public class MainActivity extends FragmentActivity {
private ProgressDialog progressDialog;
@Override
public void onCreate(Bundle savedInstanceState) {
// ...
progressDialog = new ProgressDialog(this);
// ...
}
@OnClick(R.id.history_menu_item)
protected void historyMenuItemClick() {
progressDialog.setMessage(getString(R.string.history_fragment_crossing_call_log));
progressDialog.show();
drawerLayout.closeDrawers();
switchToFragment(new HistoryFragment());
}
public void switchToFragment(final Fragment fragment) {
final FragmentManager fragmentManager = getSupportFragmentManager();
final FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();
fragmentTransaction.replace(R.id.content_frame, fragment);
fragmentTransaction.commit();
}
}
HistoryFragment:
public class HistoryFragment extends Fragment implements ActionBar.OnNavigationListener {
@Override
public void onCreate(Bundle savedInstanceState) {
// ...
updateCalls();
// ...
}
public void updateCalls() {
// ...
new ShowHistoryCallLog().execute().get();
// ...
}
private final class ShowHistoryCallLog extends AsyncTask<Void, Void, Cursor> {
// ...
@Override
protected void onPostExecute(Cursor cursor) {
// ...
final ProgressDialog progressDialog = ((MainActivity) getActivity()).getProgressDialog();
if (progressDialog != null && progressDialog.isShowing()) {
progressDialog.dismiss();
}
}
}
}