Как добавить элемент в PagingListAdpter при прокрутке до последней позиции

Как добавить новый элемент, также другой ViewType, и показать его в recyclerView, когда пользователь прокручивает до последней позиции?

введите здесь описание изображения

Я уже получаю данные из loadInitial и loadAfter. Но я задался вопросом, как добавить новый элемент, когда API отправляет мне последний элемент?

Для примера API отправляет данные размером 50, и когда пользователь прокручивает до позиции 49, мне нужно добавить еще один, который является моим пользовательским ViewType, в адаптер, и размер будет 51 позиция 50


person Phinox Mastung    schedule 30.08.2019    source источник


Ответы (2)


Вот мой код, он сработает для вас

class FollowFeedPagedListAdapter(val context: Context, val itemClicked: (FollowFeedModel) -> Unit) : PagedListAdapter<FollowFeedModel, RecyclerView.ViewHolder>(DIFF_COMPARATOR) {


val TYPE_NORMAL = 1
val TYPE_LAST_POSITION = 2

companion object {
    private val DIFF_COMPARATOR = object : DiffUtil.ItemCallback<FollowFeedModel>() {
        override fun areItemsTheSame(oldItem: FollowFeedModel, newItem: FollowFeedModel): Boolean {
            return oldItem == newItem
        }

        override fun areContentsTheSame(oldItem: FollowFeedModel, newItem: FollowFeedModel): Boolean {
            return oldItem.id == newItem.id
        }
    }

    private var hasMore: Boolean = true

    @JvmStatic
    fun getHasMoreInstance() = hasMore

    @JvmStatic
    fun setHasMoreInstance(boolean: Boolean) {
        hasMore = boolean

    }
}

override fun getItemCount(): Int {
    val size = super.getItemCount()
    //เพิ่มอันสุดท้าย
    return size+1
}

override fun getItemViewType(position: Int): Int {
    if (position == itemCount - 1) {
        return TYPE_LAST_POSITION
    } else {
        return TYPE_NORMAL
    }
}

override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): RecyclerView.ViewHolder {
    when (viewType) {
        TYPE_NORMAL -> {
            val view = LayoutInflater.from(context).inflate(R.layout.row_summaries_layout_version2, parent, false)
            return SummariesModelViewHolder(view, itemClicked)
        }
        TYPE_LAST_POSITION -> {
            val view = LayoutInflater.from(context).inflate(R.layout.layout_no_more_follow_feed, parent, false)
            return NoMoreFollowFeedViewHolder(view)
        }
        else -> {
            val view = LayoutInflater.from(context).inflate(R.layout.layout_no_more_follow_feed, parent, false)
            return SummariesModelViewHolder(view, itemClicked)
        }
    }
}


override fun onBindViewHolder(holder: RecyclerView.ViewHolder, position: Int) {

    when (holder.itemViewType) {
        TYPE_NORMAL -> {
            val holder = holder as SummariesModelViewHolder
            holder.binding(getItem(position))
        }
        TYPE_LAST_POSITION -> {
            val holder = holder as NoMoreFollowFeedViewHolder
        }
    }
}
person freeman    schedule 31.08.2019
comment
Да, это то, что мне нужно. - person Phinox Mastung; 31.08.2019

После загрузки с сервера 50 предметов (возможно, за 3 звонка по 20 + 20 + 10)

Просто сгенерируйте / выберите элементы, которые вы хотите отображать после 50-й позиции,

Затем верните эти сгенерированные / извлеченные элементы, позвонив:

'callback.onResult'

person Harsh Jatinder    schedule 30.08.2019