Новейшее обновление - 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 void 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 г.):
Поскольку this, его можно реализовать, просто используя 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}'
person
Jurij Pitulja
schedule
04.02.2019