gpt4 book ai didi

android - 回收站 View : How to determine when scrollToPosition() has finished binding the ViewHolders

转载 作者:太空宇宙 更新时间:2023-11-03 11:24:57 27 4
gpt4 key购买 nike

tl;dr 如何在调用 scrollToPosition() 后等待真正的滚动完成?我所说的真正滚动的意思是 (1) RecyclerView 已完成滚动,并且 (2) 它已将所有 ViewHolder 绑定(bind)到滚动的设置位置。

描述:

我正在尝试为回收站 View 修复一些过渡动画,但我很难实现它。

该应用程序与其中一个 Activity 中的 RecyclerView 和当用户单击 中的项目时充当“详细 View ”的 ViewPager 一致>RecyclerView.

RecyclerViewViewPager 的前向导航工作得很好,但问题是,向后导航不起作用。请注意,用户可能会在详细 View 中使用 ViewPager 进行导航,当他们使用 RecyclerView 重新进入 Activity 时,项目的位置可能与原始位置不同这种情况,意味着 RecyclerView 需要先滚动到该项目,然后恢复过渡动画。

我无法让它工作的原因是因为我在 RecyclerView 已经正确地缩放和绑定(bind)底层 ViewHolder 之前恢复动画>s 但我不知道如何等待滚动真正完成然后恢复共享元素转换。

我在我的代码中(在 Reenter 代码上)是这样的:

if (isReentering) {
// postpone the animation here
ActivityCompat.postponeEnterTransition(getActivity());
scollIndex = ... // determine the correct item position
layoutManager.scrollToPosition(scrollIndex);

final RecyclerView recyclerView = getRecyclerView();
new Handler().post(new Runnable() {
@Override
public void run() {
recyclerView.getViewTreeObserver().addOnPreDrawListener(new ViewTreeObserver.OnPreDrawListener() {
@Override
public boolean onPreDraw() {
recyclerView.getViewTreeObserver().removeOnPreDrawListener(this);
recyclerView.requestLayout();
ActivityCompat.startPostponedEnterTransition(getActivity());
return true;
}
});
}
});
}

我还在我的 Adapter 中设置了转换名称:

@Override
public void onBindViewHolder(TViewHolder holder, int position) {
....
holder.setTransitionName(_data.get(position).getContentId().toString());
}

转换名称是项目的 UUID,在底层 View 中设置。 ViewPagerRecyclerView 都设置正确。

scrollIndex 是正确的,RecyclerView 会滚​​动到它,但问题是:滚动和绑定(bind)仅在之后 生效我已经在我的代码中启动了延迟的进入转换(通过调用 ActivityCompat.startPostponedEnterTransition(getActivity());),这会导致奇怪的转换动画。

我希望以某种方式等到滚动和 ViewHolder 绑定(bind)完成,然后再调用 startPostponedEnterTransition 所以我的问题是, 我怎样才能知道滚动何时完成并且所有 ViewHolder 都已绑定(bind)以便我可以调用它?

非常感谢,

最佳答案

您可以使用 this answer 中的代码检查 ViewHolder 是否已绑定(bind)。 .

关于android - 回收站 View : How to determine when scrollToPosition() has finished binding the ViewHolders,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31254996/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com