共享元素转换替换了片段,因此我无法将其添加到后退堆栈并在按下后退箭头按钮时调用popbackstack。
我有一个主活动,里面有一个主要片段,主要片段处理一个表格布局,因此每个选项卡都是一个带有内部可滚动视图的片段。当单击可滚动视图元素时,共享元素转换开始到显示元素详细信息的新片段。
这是适配器,在其中单击元素:
这是我的选项卡片段中的openShowElementFragment:
这是前面代码块中调用的openshowelementfragment函数:
如果我尝试添加新的片段而不是替换旧的片段,则根本没有动画。
如果我尝试用新的片段替换旧的片段,并仍然使用添加到返回堆栈(null),则共享元素转换从开始到结束都有效,但最终的片段没有数据,为空:
但是这样退出时共享元素转换不起作用:
这是适配器,在其中单击元素:
holder.image.setTransitionName("transition" + holder.getAdapterPosition());
if (fragment instanceof tab1_anime) {
((tab1_anime) fragment).openShowElementFragment(holder.getAdapterPosition(), v.findViewById(R.id.main_image));
}
这是我的选项卡片段中的openShowElementFragment:
public void openShowElementFragment(int position, View view) {
AddElement element = anime_list.get(position);
ShowElementFragment showElementFragment = new ShowElementFragment();
Bundle bundle = new Bundle();
bundle.putString("transitionName", "transition" + position);
bundle.putSerializable("element", element);
bundle.putInt("position", position);
bundle.putInt("from", 0);
showElementFragment.setArguments(bundle);
((MainActivity) context).showFragmentWithTransition(this, showElementFragment, "showElementFragment", view, "transition" + position);
}
这是前面代码块中调用的openshowelementfragment函数:
public void showFragmentWithTransition(Fragment current, Fragment newFragment, String tag, View sharedView, String sharedElementName) {
FragmentManager fragmentManager = getSupportFragmentManager();
// check if the fragment is in back stack
boolean fragmentPopped = fragmentManager.popBackStackImmediate(tag, 0);
if (fragmentPopped) {
} else {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
current.setSharedElementReturnTransition(TransitionInflater.from(this).inflateTransition(R.transition.default_transition));
current.setExitTransition(TransitionInflater.from(this).inflateTransition(R.transition.default_transition));
newFragment.setSharedElementEnterTransition(TransitionInflater.from(this).inflateTransition(R.transition.default_transition));
newFragment.setEnterTransition(TransitionInflater.from(this).inflateTransition(R.transition.default_transition));
}
fragmentManager.beginTransaction()
.replace(R.id.fragmentHolder, newFragment)
.addToBackStack(null)
.addSharedElement(sharedView, sharedElementName)
.commit();
}
}
这是返回箭头按钮:
back_arrow.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
getSupportFragmentManager().popBackStack();
}
});
如果我尝试添加新的片段而不是替换旧的片段,则根本没有动画。
如果我尝试用新的片段替换旧的片段,并仍然使用添加到返回堆栈(null),则共享元素转换从开始到结束都有效,但最终的片段没有数据,为空:
我也尝试了:
getSupportFragmentManager()
.beginTransaction()
.replace(R.id.fragmentHolder, new MainFragment())
.addToBackStack(null)
.commit();
但是这样退出时共享元素转换不起作用: