Android, Kotlin: Recyclerview, как предотвратить отображение последнего элемента, но передать его адаптеру - PullRequest
0 голосов
/ 28 февраля 2020

У меня есть Recyclerview с ListAdapter, который связывает элементы, однако я должен передать методу связывания в ListAdapter также его следующий элемент в качестве параметра, потому что ему требуется некоторая информация из следующего элемента. Однако последний элемент не нужно показывать как собственный элемент списка, потому что он не содержит информацию, которую я должен показать.

РЕДАКТИРОВАТЬ: Последний элемент все еще должен быть передан в адаптер, потому что он содержит важную информацию о своем предыдущем элементе

RecyclerView просто показывает базовый макет элемента c без каких-либо данных из списка, и если я устанавливаю видимость последнего элемента (это макет ограничения) View.GONE , чем он все еще показывает пробел в Recyclerview.

Я использую это:

override fun onBindViewHolder(holder: RouteDetailViewHolder, position: Int) {
        val item = getItem(position)

        if (position < itemCount - 1) {
            val nextItem = getItem(position + 1)
            holder.bind(item, nextItem)
        }

    }

Теперь мой вопрос: Как я могу запретить Recyclerview показывать последний элемент или пробел?

Дайте мне знать, если вам нужна дополнительная информация или код Спасибо

Ответы [ 5 ]

0 голосов
/ 28 февраля 2020

Вы можете переопределить getItemCount () метод в ListAdapter и вернуть list.size - 1 , которые не позволяют отображать последний элемент

0 голосов
/ 28 февраля 2020

Во-первых, спасибо за ваши ответы, они помогли мне найти решение.

Я изменил конструктор моего адаптера, который на самом деле является подклассом ListAdapter, и передал последний элемент списка в адаптер, прежде чем я удалил его из своего списка.

Я также изменил свой onBindViewHolder:

 override fun onBindViewHolder(holder: RouteDetailViewHolder, position: Int) {
        val item = getItem(position)

        if (position < itemCount - 1) {
            val nextItem = getItem(position + 1)
            holder.bind(item, nextItem)
        }

        else {

            if (lastItem != null) {
                holder.bind(item, lastItem)
            }
        }
    }

Я надеюсь, что кто-то еще может найти это полезным, тоже

0 голосов
/ 28 февраля 2020

Если вы использовали Listadapter, просто удалите последний элемент с помощью

dataset.removeat(dataset.size-1) 

, затем вызовите метод submit с набором данных

recyclerview.submit(dataset)

А если у вас есть простой адаптер, тогда используйте

dataset.removeat(dataset.size()-1);
notifyItemRemoved(dataset.size()-1);
0 голосов
/ 28 февраля 2020

Лучший способ удалить последний элемент из списка данных и передать его адаптеру или создать адаптер с уже удаленным элементом списка.

val myList: MutableList<T> = mutableListOf<T>()
myList.removeAt(mutableListOf.lastIndex)

myAdapter.update(myList)

Класс адаптера

   class MyAdapter(private val myData: MutableList<T>):RecyclerView.Adapter<MyViewHolder>() {
       ...


    fun update(myList:MutableList<T>) {
       myData.clear()
       myData.addAll(myList)
       notifyDataSetChanged()
    }
  }

ИЛИ

в адаптере

fun onBindViewHolder (holder: MyViewHolder, pos: Int) {
  if (pos == data.lastIndex) {
    viewHolder.itemView.visibility = GONE

    // OR / AND

    viewHolder.itemView.setHeight(0)
  }
}
0 голосов
/ 28 февраля 2020

личное развлечение deleteItem (позиция: Int) {

mDataSet.removeAt(position)
notifyItemRemoved(position)
notifyItemRangeChanged(position, mDataSet.size)

}

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