在向回收器视图添加(或重新输入)片段时,片段事务滞后



当切换到显示数据recyclerviews的片段时,我的片段事务有一些滞后相关的问题。数据越多,越复杂,事务就越滞后。

我对滚动性能等没有问题。仅事务动画(在本例中为幻灯片(。

仅当我在片段生命周期的某些方法中给出recyclerview数据时,问题才会出现,例如onCreateViewonViewCreated......

我唯一可以摆脱滞后的情况是,如果我等到fragment transaction完成(动画完成(,然后将数据提供给recyclerview。但是,我认为当它对空白屏幕进行动画处理,然后将数据添加到recyclerview时,这看起来不是很好。

无论如何,我可以在交易动画完成之前提供recyclerview数据而没有滞后吗?

交易部分非常简单:

val fragmentTransaction:        FragmentTransaction?    = supportFragmentManager?.beginTransaction()
fragmentTransaction?.setCustomAnimations(animationTheme.screenRootEnter(), animationTheme.screenRootExit(), animationTheme.screenRootPopEnter(),animationTheme.screenRootPopExit())
fragmentTransaction?.add(R.id.container, fragment, tag)
fragmentTransaction?.addToBackStack(tag)
fragmentTransaction?.commit()

有趣的部分是我向recyclerview提供数据的部分:

fun setData(items: ArrayList<ListItem>) {
this.mItems     = items
notifyItemRangeInserted(0, items.size)
}

(如前所述,当从onCreateView或类似调用时,这会导致滞后(

我认为回答已经很晚了。 在创建视图时,您不应该在 UI 线程上做大量工作。 您可以覆盖片段中的onCreateAnimator()并找出动画何时结束。然后,您可以在适配器中添加数据RecyclerView。 您可以在视图创建时间中显示ProgressBar,并在加载数据后隐藏进度。

@Override
public Animator onCreateAnimator(int transit, boolean enter, int nextAnim) {
if (nextAnim != 0x0) {
Animator animator = AnimatorInflater.loadAnimator(getActivity(), nextAnim);
animator.addListener(new Animator.AnimatorListener() {
@Override
public void onAnimationStart(Animator animation) {}
@Override
public void onAnimationEnd(Animator animation) {
// We just need know animation ending when fragment entered and no need to know when exited
if (enter) {
// here add data to recyclerview adapter
}
}
@Override
public void onAnimationCancel(Animator animation) {}
@Override
public void onAnimationRepeat(Animator animation) {}
});
return animator;
}
return null;
}

最新更新