我在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;
}