【发布时间】:2016-12-06 19:34:30
【问题描述】:
在我的应用程序中,我有一个如下所示的 RecyclerView: screenshot
每一项代表一条信息;未读消息始终显示在列表顶部。如果您单击任何项目,整个片段将被相应的 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() 中以编程方式设置
【问题讨论】:
-
但是代码在哪里?