我有一个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/

10-17 01:23