2016-12-06 60 views
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()

编程设置
+0

但代码在哪里呢? – AlphaQ

回答

0

好的,我确定了这个问题。当最终视图位于屏幕之外并且未绘制时,转换不起作用。

相关问题