Фрагмент: какой обратный вызов вызывается при нажатии кнопки назад и его настройке
У меня есть фрагмент:
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
() обратные вызовы без необходимости переопределять метод в вашей деятельности.