Intereting Posts
Как добавить маршрут трейла для перемещения спрайта в andengine Дизайнер макетов Eclipse Android – добавьте новые размеры экрана для предварительного просмотра Android Maps v2: «Службы Google Play, на которые полагаются некоторые ваши приложения, не поддерживаются вашим устройством». Как подключить приложение Android к удаленной базе данных? Распознавание изображений с использованием SURF с OpenCV в Android Когда onCreateOptionsMenu происходит в действии ActionBar? URLConnection с Cookies? FragmentManager popBackStack не удаляет фрагмент Расположение по IP-адресу в помещении Конечные точки Google и аутентификация пользователя Как выйти из полноэкранного веб-приложения Net :: ERR_FILE_NOT_FOUND файл: ///android_asset/www/index.html не найден Android Pay – пример приложения не работает («Недоступно здесь») Каков практический способ установки стабильных версий и приложений для разработки приложений одновременно? Управление кнопками гарнитуры перед голосовым поиском на Jelly Bean

Android: как запретить кнопку «Назад» отменить FragmentDialog

У меня есть фрагмент, который может создавать и вызывать диалог DialogFragment, но когда я нажимаю кнопку «Назад», он отклоняет диалог, хотя я явно вызываю setCancelable (false); Есть ли способ, чтобы мой DialogFragment был нечувствителен к кнопке «Назад»?

public class LoadingDialogFragment extends DialogFragment { String title; String msg; public LoadingDialogFragment() { this.title = "Loading..."; this.msg = "Please wait..."; } public LoadingDialogFragment(String title, String msg) { this.title = title; this.msg = msg; } @Override public Dialog onCreateDialog(final Bundle savedInstanceState) { final ProgressDialog dialog = new ProgressDialog(getActivity()); dialog.setTitle(title); dialog.setMessage(msg); dialog.setIndeterminate(true); dialog.setCanceledOnTouchOutside(false); dialog.setCancelable(false); return dialog; } } 

Я создаю FragmentDialog из асинтезы:

 private class GpsTask extends AsyncTask<String, Integer, Integer> { //ProgressDialog dialog; @Override protected void onPreExecute() { FragmentTransaction ft = getSupportFragmentManager().beginTransaction(); DialogFragment newFragment = new LoadingDialogFragment("Gathering Location", "Acquiring GPS lock..."); ft.addToBackStack(null); newFragment.show(ft, "dialog"); } @Override protected Integer doInBackground(String... params) { //acquire a GPS lock and grab a few position updates } @Override protected void onProgressUpdate(Integer... input) { } @Override protected void onPostExecute(Integer result) { getSupportFragmentManager().popBackStackImmediate(); } } 

Как насчет использования setCancelable ? Вы попробовали?

Из Документов –

Контролируйте отмену показанного диалога. Используйте это вместо прямого вызова Dialog.setCancelable (boolean), потому что DialogFragment должен изменить свое поведение на основе этого

Я не совсем уверен, что это будет работать с FragmentDialogs, но если setCancelable не сработал для вас, возможно, стоит взглянуть на эту статью: Android: запрашивать пользователя для сохранения изменений при нажатии кнопки «Назад»

В нем объясняется, как определить нажатие кнопки «Назад». Может быть, вы можете подавить нажатие кнопки, и это остановит диалог закрытия?

Это может вам помочь.

 newFragment.setCancelable(false); 

Вносите изменения, как указано выше, при создании объекта DialogFragment или в конструкторе Custom DialogFragment, как в примере ниже.

 public static CustomClearHourDialog newInstance(Bundle args, IDialogListener listener) { CustomClearHourDialog clearHourDialog = new CustomClearHourDialog(); CustomClearHourDialog.listener = listener; clearHourDialog.setCancelable(false); return clearHourDialog; }