Фрагмент: вызов обратного вызова при нажатии кнопки возврата и его настройка

У меня есть фрагмент:

public class MyFragment extends Fragment{
     ...
     @Override
     public View onCreateView(...){...}    
     ...
}

Я создаю экземпляр:

MyFragment myFragment = new MyFragment();

Я использую этот фрагмент для замены текущего фрагмента:

FragmentManager fragmentManager = activity.getSupportFragmentManager();
FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();

// replace fragment
fragmentTransaction.replace(R.id.fragment_placeholder, myFragment, "myTag");

// NOTE: I did not add to back stack

Теперь на экране отображается myFragment. ПРИМЕЧАНИЕ. Я не добавил myFragment в back stack.

Мои два вопроса:

1. Если теперь, я нажимаю кнопку мобильного телефона назад, какой вызванный обратный вызов жизненного цикла фрагмента будет вызываться??

2. Как настроить кнопку назад для прослушивания кликов в классе myFragment? (просьба не предлагать мне делать myFragment.getView().setOnclickListener, но делать это в классе myFragment)

Ответ 1

Вопрос 1: См. http://developer.android.com/reference/android/app/Fragment.html#Lifecycle:

"Поскольку фрагмент больше не используется, он проходит обратную последовательность обратных вызовов:

     

onPause() - фрагмент больше не взаимодействует с пользователем либо потому, что его активность приостановлена, либо операция фрагмента   изменяя его в активности.

     

onStop() - фрагмент больше не отображается пользователю либо потому, что его активность останавливается, либо операция фрагмента изменяет его   в своей деятельности.

     

onDestroyView() - позволяет фрагменту очищать ресурсы, связанные с его представлением.

     

onDestroy() - вызов для окончательной очистки состояния фрагмента.

     

onDetach() - вызываемый непосредственно перед тем фрагментом, который больше не связан с его активностью.

Вопрос 2: Если вы должны знать, что именно обратная кнопка специально запускает обратные вызовы, вы можете зафиксировать кнопку "Назад" в своей работе "Фрагмент" и использовать свой собственный метод для ее обработки:

public class MyActivity extends Activity
{
    //...
    //Defined in Activity class, so override
    @Override
    public void onBackPressed()
    {
        super.onBackPressed();
        myFragment.onBackPressed();
    }
}

public class MyFragment extends Fragment
{
    //Your created method
    public void onBackPressed()
    {
        //Handle any cleanup you don't always want done in the normal lifecycle
    }
}

Ответ 2

Выпущена версия androidx.activity 1.0.0-alpha01, которая представляет ComponentActivity, новый базовый класс существующих FragmentActivity и AppCompatActivity.

Теперь вы можете зарегистрировать OnBackPressedCallback через addOnBackPressedCallback для получения onBackPressed вызовов onBackPressed() без необходимости переопределять метод в вашей деятельности.