【问题标题】:RecyclerView shared element transition - return to different positionRecyclerView 共享元素过渡——返回不同位置
【发布时间】: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() 中以编程方式设置

【问题讨论】:

  • 但是代码在哪里?

标签: android android-fragments


【解决方案1】:

好的,我发现了问题。当最终视图在屏幕之外且未绘制时,过渡不会播放。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-12-31
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多