我有一个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());
}
}
答案 0 :(得分:3)
请勿在{{1}}方法中点击api。因为每次滚动onbindviewholder
时都会执行onbindviewholder
方法。
如果您在活动或片段中获取数据,然后将该数据存储在arraylist中并传递给recyclerview
适配器,这将更好。
调整项目位置的问题是由recyclerview
回收滚动中的每个项目。
因此,在您的recyclerview
方法中,将此属性设置为onbindviewholder
viewHolder