0

Я работал над созданием диалогового окна, которое появляется, чтобы подтвердить, выходит ли пользователь из страницы.Как сделать диалог onBackPress в фрагменте в android?

В прошлом я использовал эту деятельность, поэтому у нее нет проблем. Мне просто нужно установить диалог внутри функции onBackPress и вызвать finish(), если пользователь решил уйти.

Однако в настоящее время я хотел бы переключить класс на фрагмент внутри табуста. Поэтому мне нужно не только обрабатывать onbackpress, но и случай, когда пользователь нажимает на панель вкладок, чтобы перейти на другую вкладку.

Я пробовал:

@Override 
public void onDetach() { 
    AlertDialog.Builder builder = new Builder(ctx); 
    builder.setMessage(getResources().getString(R.string.quit_form)); 
    builder.setNegativeButton(getResources().getString(R.string.yes), 
      new DialogInterface.OnClickListener() { 
       public void onClick(DialogInterface dialog, int which) { 
        File directory = new File(Constant.upload_imageFolder); 
        File[] files = directory.listFiles(); 
        for (int i = 0; i < files.length; ++i) { 
         files[i].delete(); 
        } 
        UploadForm.super.onDetach(); 
       } 
      }); 
    builder.setPositiveButton(getResources().getString(R.string.no), 
      new DialogInterface.OnClickListener() { 
       public void onClick(DialogInterface dialog, int which) { 
        dialog.dismiss(); 
       } 
      }); 
    builder.create().show(); 
} 

но аварии. Как решить проблему? И правильная функция onDetach для переопределения? Большое спасибо.

Update: Исключение при ondetach:

android.support.v4.app.SuperNotCalledException: Fragment UploadForm{42db9eb0 #3 id=0x7f050075} did not call through to super.onDetach() 
+1

Какая ошибка? И если вы замените 'onDetach' на' onBackPressed', это сработает? EDIT Посмотрите, что я нашел [ссылка] (http://stackoverflow.com/a/25574198/4385913) помогает ли это? –

+0

onBackPressed не может обрабатывать футляр для нажатия на вкладку меню и вкладку изменения – user782104

+0

А как насчет того, если вы попробуете это с помощью 'setKeyListenerOnView', например [this] (http://stackoverflow.com/a/27055873/4385913)? –

ответ

2

Вы должны Override onBackPressed() в деятельности. и сделать все FragmentTransaction addToBackStack перед фиксацией.

@Override public void onBackPressed() { 
    int count = getFragmentManager().getBackStackEntryCount(); 

    if (count == 0) { 
     super.onBackPressed(); 
     //additional code 
    } else { 
     getFragmentManager().popBackStack(); 
    } 
} 

Хотя вышеупомянутый подход будет работать для всех фрагментов, добавленных в задний стек. Вы также можете настроить его, чтобы следовать шаблону.

  1. Создайте интерфейс, такие как BackNavigable (реализованный теми фрагментами, которые хотели бы потреблять назад прессу), с помощью метода boolean consumeBackPress();
  2. Для тех фрагментов, которые хотели бы потреблять назад пресс возвращения событий истинное от реализации.
  3. Теперь внутри activity onBackPressed() загляните в текущий фрагмент и проверьте, является ли этот фрагмент экземпляром BackNavigable и возвращает true в его реализации consumeBackPress(). Если да, то поп этот фрагмент иначе вызывает super.onBackPressed() действия.

Вот и все.

+0

большое спасибо, как изменить вкладку, когда я нажимаю на панель вкладок меню? – user782104

+0

Для вкладок просто вам придется реализовать ту же логику, используя дочерний Fragment Manager вместо FragmentManager. –

 Смежные вопросы

  • Нет связанных вопросов^_^