Android 在Recyclerview中提前加载项目

Android 在Recyclerview中提前加载项目,android,android-recyclerview,Android,Android Recyclerview,我正在使用Recyclerview在我的android应用程序中加载联系人。每行都有一个联系人号码Textview和一个用户名Textview。联系人从本地数据库加载,但用户名应从远程服务器加载。我曾尝试在onBindViewHolder方法中加载每个联系人的用户名,但每当我快速滚动时,它就会卡住 @Override public void onBindViewHolder(final ContactsAdapter.ContactsViewHolder holder, fina

我正在使用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...

   }

所以我想在像无尽的recyclerview一样滚动时提前加载用户名。有可能实施这一点吗

我不确定我是否完全理解了您的意思,但您似乎希望在将所有数据加载到您的recyclerView之前加载它们


不用从onBindViewHolder上的远程服务器加载,您可以在活动或片段中提前加载它,并将其传递给适配器…

我不确定我是否完全理解您的意思,但似乎您希望在将其加载到recyclerView之前加载所有数据


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

不要将get调用放入onBindViewHolder中,您现在应该已经拥有了数据


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

不要将get调用放在onBindViewHolder中,您现在应该已经有了数据

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

        final ContactInfo current = cDataset.get(position);

             //Here I load from remote server...

   }

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

假设您以30大小的块加载项目。将
OnScrollListener
添加到
RecyclerView
上。每次通过某个阈值(例如,30个项目中的20个)时,您都会开始获取下一块30个项目,一旦获得了它们,就将它们放在
RecyclerView
的and处

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

        final ContactInfo current = cDataset.get(position);

             //Here I load from remote server...

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


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

假设您以30大小的块加载项。将
OnScrollListener
添加到
RecyclerView
上。每次通过某个阈值(例如,30个项目中的20个)时,您都会开始获取下一块30个项目,一旦获得了它们,就将它们放在
RecyclerView
的and处

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


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

首先从数据库加载联系人,然后从服务器获取用户名,然后更新您的回收服务我正在做同样的事情,首先从数据库加载联系人,并尝试在onbindviewholder方法中获取关联的用户名。你是说在加载recyclerview之前加载所有用户名吗?不要在OnBindViewHolder中实现与服务器相关的调用,在适配器外执行第一次从数据库加载联系人,然后从服务器获取用户名,然后更新你的recyclerview我也在做同样的事情,首先从数据库加载联系人,并尝试在onbindviewholder方法中获取关联的用户名。你是说在加载recyclerview之前加载所有用户名吗?不要在OnBindViewHolder中实现与服务器相关的调用,在适配器外执行。否我不想在加载到recyclerview之前加载所有数据。例如,如果screan可以显示5项,我想提前加载下5项。所以,每当我们滚动下5个项目时,就可以显示了。我现在明白你的意思了,你可能仍然希望提前加载所有数据并使用无止境滚动。这就是你想要的,对吗?不,我不想在一次加载到recyclerview之前加载所有数据。例如,如果screan可以显示5项,我想提前加载下5项。所以,每当我们滚动下5个项目时,就可以显示了。我现在明白你的意思了,你可能仍然希望提前加载所有数据并使用无止境滚动。这就是你想要的,对吗?