Android 向recyclerview添加数据时添加(或重新输入)片段时,片段事务滞后
我的片段事务存在一些与延迟相关的问题,当切换到一个片段时,它会显示带有数据的Android 向recyclerview添加数据时添加(或重新输入)片段时,片段事务滞后,android,android-fragments,kotlin,android-recyclerview,Android,Android Fragments,Kotlin,Android Recyclerview,我的片段事务存在一些与延迟相关的问题,当切换到一个片段时,它会显示带有数据的recyclerviews。数据越多、越复杂,事务就越滞后 我没有关于滚动性能等的问题。只有事务动画(本例中为幻灯片) 只有当我在片段生命周期的一些方法中给出recyclerview数据时,问题才会出现,比如onCreateView,onViewCreated 我唯一可以消除延迟的时间是等待片段事务完成(动画完成),然后将数据提供给回收视图。但是,当它在中设置一个空白屏幕的动画,然后将数据添加到recyclerview中
recyclerviews
。数据越多、越复杂,事务就越滞后
我没有关于滚动性能等的问题。只有事务动画(本例中为幻灯片)
只有当我在片段生命周期的一些方法中给出recyclerview
数据时,问题才会出现,比如onCreateView
,onViewCreated
我唯一可以消除延迟的时间是等待片段事务
完成(动画完成),然后将数据提供给回收视图
。但是,当它在中设置一个空白屏幕的动画,然后将数据添加到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()
有趣的部分是我将数据提供给回收视图的部分:
fun setData(items: ArrayList<ListItem>) {
this.mItems = items
notifyItemRangeInserted(0, items.size)
}
fun setData(项目:ArrayList){
this.ms=项目
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;
}
您正在recyclerView中加载哪些数据?我觉得UI线程有很大的压力。嗯,我加载的是不同的视图类型。一个og文本、drawables等的组合。然而,为了测试的目的,我确实尝试删除了所有重的内容,所以只剩下简单的文本视图,仍然可以看到延迟。没有那么多,但它仍然在那里。