ProgressDialog не отображается после нажатия кнопки ДОМОЙ и возврата в приложение - PullRequest
0 голосов
/ 24 января 2012

В моем onCreate выполняется следующий код:

dialog = new ProgressDialog(this);  
dialog.setCancelable(false);  
dialog.setCanceledOnTouchOutside(false);  
dialog.setMessage("Welcome! Initializing database... This will take just a minute");
dialog.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL);
dialog.setMax(100);
dialog.setProgress(0);
dialog.show();

Диалог должен исчезнуть только после завершения AsyncTask. Если я щелкну домой, а затем вернусь к приложению, ProgressDialog все еще должен быть там, и фактически, это то, что происходит в эмуляторе. Однако на моем HTC Evo диалоговое окно не отображается, если я щелкну домой и вернусь в приложение.

У меня также есть:

@Override 
protected void onRestart() {
    super.onRestart();
    try {
        dialog.show();
    }
    catch(Exception e) {}
}

Есть идеи, что может быть причиной этого?

Обновлено (наиболее актуальный код):

public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    mContext = this;
    RecipeDbAdapter rdAdapter;
    int recipesInDb = 0;

    // Binds automatically to "@android:id/list"
    setContentView(R.layout.country_list);
    setListAdapter(new EfficientAdapter(this));

    handler = new Handler() {
        public void handleMessage(Message msg) {
            Bundle b = msg.getData();
            String type = b.getString("type");
            String data = b.getString("data");

            // If message received to advance dialog (called during initial db load)
            try {
                if (type.equals("dialog")) {
                    dialog.incrementProgressBy(Integer.parseInt(data));

                    if (dialog.getProgress() >= dialog.getMax()) {
                        dialog.setProgress(dialog.getMax());
                        currentlyLoadingFromDb = false;
                        dialog.dismiss();
                        dialog = null;
                    }
                } else if (type.equals("update")) {
                    updateLastRecipeUpdateDate();
                }
            } catch (Exception e) {
            }
        }
    };

    try {
        rdAdapter = new RecipeDbAdapter(Countries.this);
        rdAdapter.open();
        recipesInDb = rdAdapter.fetchAllRecipesCount();
        rdAdapter.close();

        // Initialize database of recipes
        if (recipesInDb == 0) {
            currentlyLoadingFromDb = true;
            dialog = new ProgressDialog(this);
            dialog.setCancelable(false);
            dialog.setCanceledOnTouchOutside(false);
            dialog.setMessage("Welcome! Initializing database of recipes... This will take just a minute");
            dialog.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL);
            dialog.setMax(100);
            dialog.setProgress(0);
            dialog.show();
            updateLastRecipeUpdateDate();
            loadAT = new LoadDatabaseTask().execute("");
        }



        rdAdapter.close();
    } catch (Exception e) {
    }

}


@Override
protected void onPause() {
    try {
        dialog.dismiss();
    }
    catch(Exception e) {}
    super.onPause();
}

@Override
protected void onResume() {
    super.onResume();
    if (dialog!=null)
    try {
          dialog.show();
    }
    catch(Exception e) {}
  }

@Override
protected void onDestroy() {
    super.onDestroy();
}

} `

Ответы [ 2 ]

0 голосов
/ 24 января 2012

Добавьте эти строки

@Override
public void onResume()
{
    super.onResume();
    if(dialog!=null)
    dialog.show();
}

и добавьте эту строку в свою манифестную деятельность

 android:configChanges="keyboardHidden|orientation|navigation"
0 голосов
/ 24 января 2012

Вы не перезапускаете приложение?если асинхронная задача все еще выполняется, я предполагаю, что ваше приложение было только что приостановлено и вместо этого пройдет onResume.onResume должен показать его, а onPause должен закрыть его, если не создаст уведомитель панели задач.

...