我正在使用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时提前加载用户名。有可能实现这个吗?
答案 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所需的方式准备所有内容,并将其缓存在内存或数据库中。