1
在我的应用程序我有一个RecyclerView看起来像这样: screenshotRecyclerView共享元素的过渡 - 返回到不同位置
每一项代表一个消息;未读消息总是出现在列表的顶部。如果你点击任何项目,整个片段将被替换为相应的DetailsFragment。我已经设置了一个从列表项背景到细节片段背景的共享元素转换,以实现“扩展”效果。当选定的信息已经被阅读时,它可以很好地工作;但是,如果您打开未读邮件,则会将其标记为已读,从而更改列表中的位置。如果您尝试使用RecyclerView返回片段,则不会播放共享元素转换:细节片段随着默认转换(淡入淡出)而消失。 我搜索了文档,但共享元素转换没有很好地记录。有谁知道这个问题的任何解决方案或解决方法?
编辑:我成立了过渡的RecyclerView的的onClick如下:
@Override
public void onItemClick(View view, int position) {
FragmentManager fragmentManager = getFragmentManager();
FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();
MessageDetailsFragment fragment = MessageDetailsFragment.newInstance(message);
RelativeLayout background = (RelativeLayout) view.findViewById(R.id.three_line_list_item_background);
TransitionInflater transitionInflater = TransitionInflater.from(getContext());
Transition t = new Fade();
Transition details_enter = transitionInflater.inflateTransition(R.transition.details_enter);
Transition details_exit = transitionInflater.inflateTransition(R.transition.details_exit);
fragment.setSharedElementEnterTransition(details_enter);
fragment.setSharedElementReturnTransition(details_exit);
setSharedElementEnterTransition(details_enter);
setSharedElementReturnTransition(details_exit);
fragment.setExitTransition(t);
fragment.setEnterTransition(t);
fragment.setReturnTransition(t);
fragment.setReenterTransition(t);
setEnterTransition(t);
setExitTransition(t);
setReturnTransition(t);
setReenterTransition(t);
fragmentTransaction.addSharedElement(background, background.getTransitionName());
fragmentTransaction.addToBackStack(null).commit();
fragmentTransaction.replace(((ViewGroup) getView().getParent()).getId(), fragment);
}
过渡名称(唯一消息ID组成)在RecyclerView适配器的onBindViewHolder()和DetailFragment的onCreateView()
编程设置
但代码在哪里呢? – AlphaQ