Пользовательские общие элементы фрагмента PopBackStack - PullRequest
0 голосов
/ 04 мая 2020

У меня есть следующая структура: Основная активность -> ViewPager -> Фрагмент хоста + Фрагмент хоста 2

Фрагмент хоста -> сначала заменить на FirstFragment1 Фрагмент хоста 2 -> сначала заменить на FirstFagment2

Во Fragment1 у меня есть вид Recycler. Я сделал интерфейс прослушивателя щелчков для использования между адаптером рециркулятора и Fragment1, чтобы я мог создавать собственные стеки popback для каждой вкладки.

Метод popBackStack в каждом фрагменте хоста:

    public boolean popBackStack() {
        if(getChildFragmentManager().getBackStackEntryCount() > 0) {
            getChildFragmentManager().popBackStack();
            return true;
        } else
            return false;
    }

Вот как я переопределить onBackPressed в Main Activity:

@Override
    public void onBackPressed() {
        if (viewPager.getCurrentItem() == 0) {
            HostFragment fragment = ((HostFragment) mPagerController.getItem(0));
            if (!fragment.popBackStack())
                super.onBackPressed();
        } else if (viewPager.getCurrentItem() == 1) {
            HostFragment2 fragment = ((HostFragment2) mPagerController.getItem(1));
            if (!fragment.popBackStack())
                super.onBackPressed();
        } else
            super.onBackPressed();
    }

Это onClick, переопределенный из интерфейса во Fragment1:

    @Override
    public void onImageClick(int position, View itemView) {
        ImageView image1 = itemView.findViewById(R.id.picPost);
        Bundle bundle = new Bundle();
        ExampleFeed exampleFeed = exampleFeedArrayList.get(position);
        bundle.putInt("postimage", exampleFeed.getPostpic());
        FragmentManager fm = getFragmentManager();
        FragmentTransaction transaction = fm.beginTransaction();
        Fragment2 fragment2 = Fragment2.newInstance();
        setSharedElementReturnTransition(TransitionInflater.from(getActivity()).inflateTransition(R.transition.change_image_transform));
        setExitTransition(TransitionInflater.from(getActivity()).inflateTransition(android.R.transition.fade));
        fragment2.setSharedElementEnterTransition(TransitionInflater.from(getActivity()).inflateTransition(R.transition.change_image_transform));
        fragment2.setSharedElementReturnTransition(TransitionInflater.from(getActivity()).inflateTransition(R.transition.change_image_transform));
        fragment2.setEnterTransition(TransitionInflater.from(getActivity()).inflateTransition(android.R.transition.slide_bottom));
        fragment2.setArguments(bundle);
        transaction
                .addSharedElement(tv_time, timeTransitionName)
                .replace(R.id.frame_container, fragment2)
                .addToBackStack(null)
                .commit();
    }

Анимации общего элемента работают, когда я щелкаю изображение в представлении рециркулятора и откройте Fragment2, но когда я нажимаю назад, они больше не работают, и это всего лишь анимация slide_bottom из setEnterTransition для всего фрагмента.

Что может вызвать эту проблему? Большое спасибо!

ОБНОВЛЕНИЕ: Я обнаружил, что проблема setSharedElementReturnTransition. Это ничего не делает. Даже если я удаляю его, он делает то же самое

...