2016-09-18 4 views
0

У меня есть RecyclerView, чей адаптер извлекает сведения об идентификаторе места с помощью API Google Адресов. Затем адаптер отображает эти детали (например, адрес места) в каждом элементе RecyclerView.Вызов API Google Адресов в RecyclerView

Есть ли рекомендуемый способ достижения этого асинхронно? В моем текущем решении адреса места иногда отображаются в некорректном элементе RecyclerView, когда пользователь прокручивается вверх или вниз. Также, когда вы нажимаете элемент RecyclerView для перехода на экран подробных данных, а затем возвращаетесь к исходному экрану, некоторые адреса места отсутствуют в RecyclerView (предположительно, существует задержка, когда детали все еще извлекаются из API-интерфейсов Places) ,

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()); 
       } 
    } 

ответ

2

Dont hit api in onbindviewholder способ. Потому что метод onbindviewholder выполняется каждый раз, когда вы прокручиваете recyclerview.

Это будет лучше, если вы извлечете данные в действие или фрагмент, а затем сохраните эти данные в arraylist и перейдите к адаптеру recyclerview.

И проблема перестановки позиции позиции из-за recyclerview утилизация каждого элемента на свитке.

Так что в вашем onbindviewholder методе установите это свойство viewHolder

viewHolder.setIsRecycleable(false); 
Смежные вопросы