Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/198.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的ViewPager2中出现RecyclerView项时,如何延迟加载?_Android_Android Recyclerview_Android Fragmentactivity_Android Viewpager2 - Fatal编程技术网

在android的ViewPager2中出现RecyclerView项时,如何延迟加载?

在android的ViewPager2中出现RecyclerView项时,如何延迟加载?,android,android-recyclerview,android-fragmentactivity,android-viewpager2,Android,Android Recyclerview,Android Fragmentactivity,Android Viewpager2,我使用ViewPager2在各个片段中使用RecyclerView显示片段中的数据。有两个片段。每个片段包含1个RecyclerView。一切正常,只是一个小问题,当我启动包含此ViewPage2的活动时,如果存在大量项目,则活动启动非常慢。我知道整个场景还有其他解决方案,例如使用ConstraintLayout减少复杂的UI,等等。但在我的例子中,我优化了所有这些,但我的活动启动时间仍然很慢 所以现在我想用下面的方式做这些事情: 加载活动->显示加载。。。TextView->在调用内部Recy

我使用ViewPager2在各个片段中使用RecyclerView显示片段中的数据。有两个片段。每个片段包含1个RecyclerView。一切正常,只是一个小问题,当我启动包含此ViewPage2的活动时,如果存在大量项目,则活动启动非常慢。我知道整个场景还有其他解决方案,例如使用ConstraintLayout减少复杂的UI,等等。但在我的例子中,我优化了所有这些,但我的活动启动时间仍然很慢

所以现在我想用下面的方式做这些事情:

  • 加载活动->显示加载。。。TextView->在调用内部RecyclerView的notifyDatasetChanged()之前等待一段时间
  • 因此,我使用以下方法:

      final MaterialTextView loadingMTV = findViewById(R.id.loadingMTV);
        loadingMTV.postDelayed(new Runnable() {
            @Override
            public void run() {
                loadingMTV.setVisibility(View.GONE);
                recyclerViewAdapter.setTasks();
                completedRecyclerViewAdapter.setTasks();
    
                //setTasks() will contain notifyDatasetChanged() related logic
            }
        },500);
    
    因此,它会将内部内容加载延迟500毫秒。现在我的活动开始时间和往常一样。一切正常。只有一个问题,我用500毫秒作为延迟时间。我不想要这个硬编码的值。那么,在整个情况下,如何使用适当的延迟时间呢

  • 活动内部组件的创建—创建活动本身的过程,因此,在创建所有内部视图之前,不会创建活动本身

  • 这些问题通过将复杂而冗长的计算转移到单独的线程来解决。您可以使用现成的异步通信机制,如RxJava。因此,在另一个线程上,您创建视图组件,而在UI线程上,您只显示它们并与它们交互


  • 有没有办法先创建空片段,然后向该片段添加recyclerview,然后再加载数据?因为这两个空白片段,所以活动可以尽快开始?这是很少练习的。最好的选择是使用异步。考虑RXJava或Looper-/HANDLE或JavaLang.thRead在我的案例中,我发现用户界面创建的CurryReVIEW项目占用了太多时间。也就是说,我想在RecyclerView中加载的数据很快变得可用,但RecyclerView项目的UI占用了太多时间。那么在我的例子中,哪一个更可取?有多慢,数据集有多大?我在布局中添加了一个TextView,然后在找到该TextView后,我在其post()中添加了一个runnable,将在10毫秒后运行。在那个runnable里我找到了recyclerview记录。通过使用这种方法,我解决了延迟的活动加载问题。我的数据集没有那么大,但recyclerview适配器的onbind()太复杂了。所以我也简化了代码。不管它有多复杂,我们都不应该修正它。我增加了额外的延迟,你能告诉我们你是如何测量延迟的,并得出了时间吗?因为您的代码中可能有一些小的东西,这可能是所有这些问题的原因,现在在添加延迟之后,它变得更加复杂,将来可能会产生一些其他问题。我只是懒散地加载recyclerview数据。首先,我加载空的recyclerview并显示“获取”文本视图。然后,我在runnable中加载textview的post()中的实际数据。