我有一个RecyclerView,其适配器使用Google Places API提取有关位置ID的详细信息。然后,适配器在RecyclerView的每个元素中显示这些详细信息(例如,地点地址)。
是否有推荐的方法来异步实现?在我当前的解决方案中,当用户向上或向下滚动时,地方地址有时会显示在错误的RecyclerView元素中。同样,在点击RecyclerView元素以进入详细信息屏幕,然后返回到原始屏幕时,RecyclerView中缺少一些地方地址(大概在从Places API提取详细信息时会有延迟) 。
public void onBindViewHolder(final ViewHolder v, int position) {
Places.GeoDataApi.getPlaceById(googleApiClient, placeID)
.setResultCallback(new ResultCallback<PlaceBuffer>() {
@Override
public void onResult(PlaceBuffer places) {
Place place = places.get(0);
// Display address in the RecyclerView element
v.address.setText(place.getName());
}
}
最佳答案
不要在onbindviewholder
方法中点击api。因为onbindviewholder
方法每次滚动recyclerview
时都会执行。
如果您先获取活动或片段中的数据,然后将其存储在arraylist中并传递给recyclerview
适配器,则效果会更好。
改组项目位置的问题是由于recyclerview
回收滚动条上的每个项目。
因此,在您的onbindviewholder
方法中,将此属性设置为viewHolder
viewHolder.setIsRecyclable(false);
关于android - 在RecyclerView中调用Google Places API,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/39553072/