Почему getItem в onBindViewHolder будет нулевым? - PullRequest
0 голосов
/ 26 октября 2018

Итак, я пытаюсь следить за библиотекой подкачки.и в большинстве примеров они имеют что-то вроде:

@Override
public void onBindViewHolder(@NonNull PokemonViewHolder pokemonViewHolder, int i) {
    Pokemon pokemon = getItem(i); 
    if (pokemon != null) { // <-- why this check here?
        pokemonViewHolder.bind(pokemon);
    }
}

Почему вы должны проверить, что элемент в адаптере равен нулю?Я не понимаю внутренности потока PagedListAdapter.Кто-нибудь может объяснить, пожалуйста?

Я предполагаю, что у нас есть наблюдатель на адаптере, который в какой-то момент "обнажает" содержимое адаптера из потока пользовательского интерфейса, как только источник данных обновляется, и, таким образом, позиция этого элементаустарела?

Ответы [ 2 ]

0 голосов
/ 26 октября 2018

PagedList всегда имеет полный размер набора данных.PagedList по умолчанию возвращает ноль для данных, которые еще не загружены .

Это означает, что в нашем адаптере нам нужно помнить, что мы проверяем наличие нуля в нашем методе связывания.

http://blog.abnormallydriven.com/2017/09/30/introducing-the-paging-library/

0 голосов
/ 26 октября 2018

Это объясняется в официальных документах:

@Override
public void onBindViewHolder(UserViewHolder holder, int position) {
    User user = getItem(position);
    if (user != null) {
        holder.bindTo(user);
    } else {
        // Null defines a placeholder item - PagedListAdapter will automatically invalidate
        // this row when the actual object is loaded from the database
        holder.clear();
    }
}
  1. https://developer.android.com/reference/android/arch/paging/PagedListAdapter
...