Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/185.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 向recyclerview添加数据时添加(或重新输入)片段时,片段事务滞后_Android_Android Fragments_Kotlin_Android Recyclerview - Fatal编程技术网

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等的组合。然而,为了测试的目的,我确实尝试删除了所有重的内容,所以只剩下简单的文本视图,仍然可以看到延迟。没有那么多,但它仍然在那里。