在Recyclerview中预先加载项目

时间:2016-12-13 14:51:52

标签: android android-recyclerview

我正在使用Recyclerview在我的Android应用中加载联系人。每行都有一个联系号码Textview和一个用户名Textview。联系人从本地数据库加载,但用户名应从远程服务器加载。我尝试在onBindViewHolder方法中为每个联系人加载用户名,但每当我快速滚动时它就会卡住。

    @Override
    public void onBindViewHolder(final ContactsAdapter.ContactsViewHolder holder, final int position) {

        final ContactInfo current = cDataset.get(position);

             //Here I load from remote server...

   }

所以我想在滚动像Endless recyclerview时提前加载用户名。有可能实现这个吗?

3 个答案:

答案 0 :(得分:2)

我不确定我到底在说什么,但似乎你想在加载到recyclerView之前加载所有数据。

而不是从onBindViewHolder上的远程服务器加载,您可以在Activity或Fragment中预先加载它并将其传递给您的适配器......

答案 1 :(得分:0)

不要把你的电话放在你的onBindViewHolder上,你现在应该已经拥有了你的数据。

要么在初始化适配器之前通过调用获取数据,要么仍然需要从适配器内部获取数据,将该调用放在后台线程中,尽管如果你有可能遇到问题滚动快。

答案 2 :(得分:0)

我们假设您以30个​​大小的方式加载项目。在OnScrollListener上添加RecyclerView。每当你通过一个门槛时,例如,30个项目中的20个,你就会开始获取30个项目的下一个块,并且一旦你拥有它们,就把它们放在RecyclerView的和。{/ p>

玩这个数字。您可以尝试100和50,或50和10,而不是30和20.找到您拥有最佳用户体验的数字。但是,请不要指望用户始终准备好下一组数据,因此只要您要加载更多数据,请在ProgressBar末尾保留一个循环RecyclerView

您可以尝试的另一种方法是定期启动一个服务,该服务将获取所有必需的数据,按照UI所需的方式准备所有内容,并将其缓存在内存或数据库中。