Android – Как показать диалог после завершения деятельности

Скажем, у нас есть два вида деятельности: Activity1 и Activity2.

В методе onClick () Activity1 у нас есть вызов, чтобы запустить Activity 2, если нажата определенная кнопка:

Intent myIntent = new Intent(Activity1.this, Activity2.class); Activity1.this.startActivity(myIntent); 

После того, как finish () вызывается в Activity2, и Activity1 возобновляется, мне нужно открыть диалоговое окно в Activity1, как только оно будет возобновлено.

Раньше я просто вызывал showDialog (id) в том же блоке метода onClick () Activity1:

 public void onClick(View v) { if(v == addHole){ //... Intent myIntent = new Intent(Activity1.this, Activity2.class); Activity1.this.startActivity(myIntent); showDialog(END_DIALOG_ID); } } 

Проблема заключается в том, что после возобновления Activity1 диалог, соответствующий END_DIALOG_ID, не отображается, но экран затемнен и не отвечает (как если бы диалог присутствовал), пока не будет нажата задняя клавиша.

Я попытался поместить вызов showDialog () в методы onResume () и onRestart () Activity1, но оба они врезались в программу.

Я также попытался создать метод AsyncTask в Activity2 с вызовом showDialog () в onPostExecute (), но диалог не отображается в Activity2.

 private class ShowDialogTask extends AsyncTask<Void, Void, Integer> { /** The system calls this to perform work in a worker thread and * delivers it the parameters given to AsyncTask.execute() */ protected Integer doInBackground(Void... id) { //do nothing return END_DIALOG_ID; } /** The system calls this to perform work in the UI thread and delivers * the result from doInBackground() */ protected void onPostExecute(Integer id) { super.onPostExecute(id); showDialog(id); } } 

Теперь я пытаюсь реализовать это, позвонив

 Activity1.this.startActivityForResult(myIntent, END_DIALOG_REQUEST); 

С соответствующими методами setResult () и onActivityResult () из Activity1, но кажется, что для реализации этого должна быть более эффективная практика. Все, что мне нужно – это открыть диалоговое окно, показанное после завершения Activity2.

Спасибо за любую помощь, которую вы можете предоставить.

Как вы предлагаете, при запуске Activity2 вызовите startActivityForResult . Затем переопределите onActivityResult и проверьте RESULT_OK и затем отобразите свое диалоговое окно. Это вполне приемлемая практика для того, чтобы делать то, что вы хотите сделать.

Вы можете использовать метод onResume (если u'r не смотрит ничего из Activity2)

 @Override public void onResume(){ super.onResume(); //do something } 

Я должен вернуться к корневой активности – MainActivity, потенциально закрывая несколько действий, а затем показывать диалог. Поэтому я выбрал альтернативный путь.

 MyDialog { public static synchronized void planToShowDialog(String info) { if (info != null) { saveInfoToPreferences(info); } } public static synchronized void showDialogIfNecessary(Context context) { String info = readInfoFromPreferences(); if (info != null) { saveInfoToPreferences(null); // Show dialog once for given info. new MyDialog(context, info).show(); } } private static String readInfoFromPreferences() { //... } private static void saveInfoToPreferences(String info) { //... } } 

Я вызываю метод MyDialog.showDialogIfNecessary () из метода MainActivity.onPostResume ().