Самое новое ОБНОВЛЕНИЕ 25 апреля 2019 года
Новая версия androidx.activity ver. 1.0.0-alpha07 приносит некоторые изменения
Больше объяснений в официальном руководстве для Android: Предоставление пользовательской обратной навигации
Пример:
public class MyFragment extends Fragment {
@Override
public void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
// This callback will only be called when MyFragment is at least Started.
OnBackPressedCallback callback = new OnBackPressedCallback(true /* enabled by default */) {
@Override
public boolean handleOnBackPressed() {
// Handle the back button event
}
});
requireActivity().getOnBackPressedDispatcher().addCallback(this, callback);
// The callback can be enabled or disabled here or in handleOnBackPressed()
}
...
}
СТАРЫЕ ОБНОВЛЕНИЯ
UPD: 3 апреля 2019
Теперь это упрощено. Подробнее здесь
Пример:
requireActivity().getOnBackPressedDispatcher().addCallback(getViewLifecycleOwner(), this);
@Override
public boolean handleOnBackPressed() {
//Do your job here
//use next line if you just need navigate up
//NavHostFragment.findNavController(this).navigateUp();
//Log.e(getClass().getSimpleName(), "handleOnBackPressed");
return true;
}
Устаревший (начиная с версии 1.0.0-alpha06
3 апреля 2019 г.):
Поскольку это , его можно реализовать, используя JetPack реализацию OnBackPressedCallback
в вашем фрагменте
и добавьте его в активность:
getActivity().addOnBackPressedCallback(getViewLifecycleOwner(),this);
Ваш фрагмент должен выглядеть так:
public MyFragment extends Fragment implements OnBackPressedCallback {
@Override
public void onActivityCreated(@Nullable Bundle savedInstanceState) {
super.onActivityCreated(savedInstanceState);
getActivity().addOnBackPressedCallback(getViewLifecycleOwner(),this);
}
@Override
public boolean handleOnBackPressed() {
//Do your job here
//use next line if you just need navigate up
//NavHostFragment.findNavController(this).navigateUp();
//Log.e(getClass().getSimpleName(), "handleOnBackPressed");
return true;
}
@Override
public void onDestroyView() {
super.onDestroyView();
getActivity().removeOnBackPressedCallback(this);
}
}
UPD:
Ваша активность должна продолжаться AppCompatActivity
или FragmentActivity
и в файле Gradle:
implementation 'androidx.appcompat:appcompat:{lastVersion}'