Есть Fragment, в нем есть кнопка, при нажатии следующего Fragment открывается с анимацией, но при нажатии кнопки назад, то есть onbackpressed, предыдущий Fragment возвращается, но без анимации. Как добавить анимацию при нажатии onbackpressed. Насколько я понимаю, нужно как-то добавить onbackpressed и назначить ему анимацию. Тогда как добавить onbackpressed к Fragment?

? введите здесь описание изображения

Fragment, от которого мы переходим

public class FragmentAttraction extends Fragment {

    FragmentGyro fragmentGyro;
    BlankFragment blankFragment;

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
    }

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {
        return inflater.inflate(R.layout.fragment_attraction, container, false);
    }

    @Override
    public void onViewCreated(@NonNull final View view, @Nullable Bundle savedInstanceState) {

        fragmentGyro = new FragmentGyro();
        blankFragment= new BlankFragment();

        CardView gyro = requireView().findViewById(R.id.Gyro_);


        gyro.setOnClickListener(v -> {
            FragmentTransaction ft = getActivity().getSupportFragmentManager().beginTransaction();
            ft.setCustomAnimations(R.anim.transition_enter, R.anim.transition_exit);
            ft.replace(R.id.fragment, blankFragment, "detailFragment");
            ft.addToBackStack(null);
            ft.commit();
        });
    }
}

Fragment мы идем в

public class FragmentGyro extends Fragment {

    private final String[] imageUrls = new String[]{
            "https://cdn.pixabay.com/photo/2016/11/11/23/34/cat-1817970_960_720.jpg",
            "https://cdn.pixabay.com/photo/2017/12/21/12/26/glowworm-3031704_960_720.jpg",
            "https://cdn.pixabay.com/photo/2017/12/24/09/09/road-3036620_960_720.jpg",
            "https://cdn.pixabay.com/photo/2017/11/07/00/07/fantasy-2925250_960_720.jpg",
            "https://cdn.pixabay.com/photo/2017/10/10/15/28/butterfly-2837589_960_720.jpg"
    };

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

    }

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {
        return inflater.inflate(R.layout.fragment_gyro, container, false);

    }

    @Override
    public void onViewCreated(@NonNull final View view, @Nullable Bundle savedInstanceState) {
        ViewPager viewPager = requireView().findViewById(R.id.view);
        ViewPagerAdapter adapter = new ViewPagerAdapter(requireActivity(), imageUrls);
        viewPager.setAdapter(adapter);

        TextView text = requireView().findViewById(R.id.text_o);

        viewPager.addOnPageChangeListener(new ViewPager.OnPageChangeListener() {

            @Override
            public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {

            }

            @SuppressLint("DefaultLocale")
            @Override
            public void onPageSelected(int position)
            {
                text.setText(String.format("%d/%d", position, 4 ));
            }

            @Override
            public void onPageScrollStateChanged(int state) {

            }
        });
    }
}
0
Buldog 29 Ноя 2020 в 00:09

1 ответ

Лучший ответ

Есть две версии setCustomAnimations():

  • Тот, который вы используете, требует только анимации enter и exit
  • Версия с четырьмя аргументами , который также принимает анимацию popEnter и popExit - это анимации, которые запускаются, когда фрагмент выталкивается (то есть, когда вы нажимаете кнопку возврата).
ft.setCustomAnimations(R.anim.transition_enter, R.anim.transition_exit,
    R.anim.transition_enter, R.anim.transition_exit);
1
ianhanniballake 28 Ноя 2020 в 21:16