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

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

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 в стек

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

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

2. Как я могу настроить приемник нажатия кнопки "Назад" в MyFragment учебный класс? (пожалуйста, не предлагайте мне сделать myFragment.getView().setOnclickListener, но сделай это в MyFragment учебный класс)

1 ответ

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

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

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

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

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

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
    }
}

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

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

Другие вопросы по тегам