Элемент обновления Android jetpack paging3

Я использую paging3 для отображения данных. Когда я хочу обновить несколько элементов, как мне узнать положение этих элементов? используйте notifyItemChanged. (я знаю идентификатор этих элементов, но нет API для получения данных адаптера)


person binzhi lai    schedule 28.07.2020    source источник


Ответы (1)


Вы можете установить прослушиватель щелчков, и после действия щелчка вы можете изменить элемент и обновить вид

    class Adapter(val countryList: MutableList<CountryModel>,
    clickFunc : ((CountryModel?, Int, View) -> Unit)? = null) : RecyclerView.Adapter<Adapter.ModelViewHolder>() {
    
        class ModelViewHolder(view: View) : RecyclerView.ViewHolder(view) {
            val countryName: TextView = view.findViewById(R.id.countryName)
            val capitalName: TextView = view.findViewById(R.id.capitalName)
            val flagImage: ImageView = view.findViewById(R.id.flagImage)
            
            fun bindItems(item: CountryModel) {
                countryName.setText(item.countryName)
                capitalName.setText(item.capitalName)
                flagImage.setImageResource(item.flagImage)

                view.setOnClickListener {
                   clickFunc?.invoke(item, adapterPosition, view)
                }
            }
        }
    
        override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ModelViewHolder {
            val view = LayoutInflater.from(parent.context).inflate(R.layout.item_card, parent, false)
            return ModelViewHolder(view)
        }
    
        override fun getItemCount(): Int {
            return countryList.size
        }
    
        override fun onBindViewHolder(holder: ModelViewHolder, position: Int) {
            holder.bindItems(countryList.get(position))
        }
    }

В своей деятельности установите функцию прослушивания кликов

recyclerView.adapter = Adapter(getModels()) { item, pos, view -> 
      recyclerViewClickListener(item, pos, view) 
}

Затем измените свой элемент и обновите вид

private fun recyclerViewClickListener(item : CountryModel?, pos : Int, view : View) {
    item.countryName = "new name"
    adapter.notifyItemChanged(pos, item)
}
person ysfcyln    schedule 20.09.2020