假设我有FragmentA
和DetailActivity
。 FragmentA
有一个RecyclerViewAdapter
。该适配器中的项目都有一个图像。当用户点击某个项目时,我想显示一个显示相同图像的详细信息页面(在DetailActivity
中)。所以我将该图像作为共享元素,因此在导航到DetailActivity
时我们获得了很好的转换。我已使用此代码实现了此功能:
ActivityOptionsCompat options = ActivityOptionsCompat.makeSceneTransitionAnimation(
(Activity) context,
recyclerViewHolder.img_bridge_icon,
ViewCompat.getTransitionName(recyclerViewHolder.img_bridge_icon));
ActivityCompat.startActivity(context, intent, options.toBundle());
这很棒!图像被缩放并重新定位。现在,当我返回FragmentA
时,适配器中的项已经加载了图像,而共享元素仍然忙于其转换。这意味着共享元素将显示两次,直到完成过渡动画。
我知道发生这种情况是因为FragmentA
从DetailActivity
返回时必须再次创建其视图。但是我该如何解决这个问题呢?在转换加载时,适配器应该以某种方式知道不显示共享ImageView
。
我添加了在DetailActivity
到FragmentA
过渡期间制作的屏幕截图。底部图像是来自DetailActivity
的图像,顶部图像来自适配器中的项目,它不应该在那里(底部图像应该是唯一的一个,因为它是那个中的一个)转换)。