Что вызывает onBackPress во фрагменте

Во фрагменте у меня есть это:

onPause(){

super.onPause();
if(flag){
getActivity.finish();
}else{
}
}

onResume(){

flag = true;
super.onResume();
}

и есть кнопка, на клик я установил этот флаг в ложь:

Button.onClick{
flag = false;
}

Идея заключается в следующем:

когда кнопка нажата, не заканчивайте это действие. Но когда устройство BackButton нажата, готово ().

Но эта логика не работает. Причина в том, что когда я нажимаю кнопку BackButton устройства, onPause не вызывается.

Это 4-й фрагмент в деятельности. Поэтому, когда я нажимаю кнопку BackButton, я вижу третий фрагмент. Что я не хочу.

Я использую это на устройстве API 10, но мое приложение использует библиотеку поддержки v4.

Благодарю вас.

2 ответа

Решение

Если вы хотите закрыть задание, нажмите "Назад", затем onBackPressed внутри деятельности следующим образом:

public void onBackPressed() {
   Fragment fragment = getSupportFragmentManager().findFragmentByTag("yourfragment");
   if (fragment instanceOf YourFragmet) {
          finish();
          return;
   }
   super.onBackPressed();
}

Если вы хотите закрыть действие по нажатию кнопки, то вы можете позвонить

Button.onClick{
  getActivity().onBackPressed();
}

ИЛИ ЖЕ

Button.onClick{
  getActivity().finish();
}

Если при переходе между фрагментами вы вызываете addToBackStack() как часть вашей FragmentTransaction, тогда кнопка "Назад" перенесет вас к фрагменту в верхней части заднего стека.

Почему вы не можете использовать onDetach() Fragment? При нажатой клавише Back для фрагмента будет вызвано onDetach(), чтобы удалить это.

@Override
public void onDetach() {
   super.onDetach();
   if(flag){
     getActivity.finish();
   }else{
        }
}
Другие вопросы по тегам