当我使用带有StaggeredGridLayoutManager和共享元素的recyclerview回到活动时,我遇到了问题。
为了告诉我问题,我创建了一个小应用程序:
https://github.com/Anton111111/RecyclerViewSharedElement/tree/master/app/src/main/java/anton111111/com/recyclerviewsharedelement
在MainActivity中,我使用带有StaggeredGridLayoutManager的RecyclerView。此RecyclerView的适配器为每个项目设置随机高度。
点击项目我打开DetailsActivity(
https://github.com/Anton111111/RecyclerViewSharedElement/blob/master/app/src/main/java/anton111111/com/recyclerviewsharedelement/DetailsActivity.java)
在DetailsActivity上我也有RecyclerView。 当我打开DetailsActivity转换正常工作。但是如果我滚动RecyclerView然后按回来过渡到MainActivity工作不正确。
为了显示它,我创建了一个小视频:https://youtu.be/zVtS5vVFZ7s
在这个视频中,我从第14项回来了。在过渡动画到达recyclerview之后,你如何看到它返回到第14项然后第14项。
我认为我的问题在onActivityReenter方法中,这是代码:
public void onActivityReenter(int resultCode, Intent data) {
super.onActivityReenter(resultCode, data);
newPosition = data.getIntExtra(EXTRA_POSITION, -1);
postponeEnterTransition();
if (newPosition > -1) {
recyclerView.scrollToPosition(newPosition);
}
recyclerView.getViewTreeObserver().addOnPreDrawListener(
new ViewTreeObserver.OnPreDrawListener() {
@Override
public boolean onPreDraw() {
startPostponedEnterTransition();
return true;
}
});
}
在这个方法上,我滚动到后面的项目位置。我使用postponeEnterTransition();
并在RecyclerView的startPostponedEnterTransition();
上使用onPreDraw()
。
任何人都可以帮助我并说出滚动到位置后startPostponedEnterTransition()
如何完成?