ViewPager共享元素内部的Recyclerview片段返回不起作用

时间:2019-01-04 14:27:55

标签: android shared-element-transition

我在viewpager内嵌套了片段,其中之一有一个recyclerview,当我单击项目时,它在嵌套的片段内显示了一个详细片段,如下所示:

              |              |<ProductDetailFragment>
<InfoFragment>|<Shopfragment>|<ProductFragment>
<HostFragment>|<HostFragment>| <HostFragment>
<---------------------ViewPager--------------------->

从底部到顶部显示了我的嵌套结构。我已经设法在ProductFragment Recyclerview -> ProductDetailFragment之间编写了一个共享元素转换,但是当我弹出Backstack Hostfragment时,返回转换不起作用。我曾尝试推迟退货,但这也不起作用。 这是代码:

default_transition.xml

<?xml version="1.0" encoding="utf-8"?>
<transitionSet xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:duration="300"
    android:interpolator="@android:interpolator/fast_out_slow_in"
    android:transitionOrdering="together"
    tools:targetApi="lollipop">
    <changeClipBounds />
    <changeTransform />
    <changeBounds />
</transitionSet>

ProductAdapter.class

        ViewCompat.setTransitionName(holder.photoIv, "Picture" + product.getId());
        ViewCompat.setTransitionName(holder.nameTv, "Name" + product.getId());

OnItemClick

public void replaceFragmentWithTransition(Fragment fragment, View transitionImage, View transitionText) {
        getChildFragmentManager().beginTransaction()
                .addSharedElement(transitionImage, ViewCompat.getTransitionName(transitionImage))
                .addSharedElement(transitionText, ViewCompat.getTransitionName(transitionText))
                .replace(R.id.hosted_fragment, fragment).addToBackStack(null).setReorderingAllowed(true).commit();
    }

DetailFragment.class

@Override
public void onCreate(@Nullable Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    postponeEnterTransition();
    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
        setSharedElementEnterTransition(TransitionInflater.from(getContext()).inflateTransition(R.transition.default_transition));
    }
}

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
                         Bundle savedInstanceState) {
    // Inflate the layout for this fragment
    View view = inflater.inflate(R.layout.fragment_product_detail, container, false);
    ViewCompat.setTransitionName(headerIv, "Picture" + product.getId());
    ViewCompat.setTransitionName(nameTv, "Name" + product.getId());

    final ProgressDialog progressDialog = ProgressDialog.show(getContext(), null, "Loading HQ image...");
    Picasso.with(getContext()).load(product.getPhotoUrl())
            .noFade().fit().centerCrop().into(headerIv, new com.squareup.picasso.Callback() {
        @Override
        public void onSuccess() {
            progressDialog.dismiss();
            startPostponedEnterTransition();
        }

        @Override
        public void onError() {
            progressDialog.dismiss();
            startPostponedEnterTransition();
        }
    });


        nameTv.setText(product.getName());
        return view;
    }

0 个答案:

没有答案