簡體   English   中英

Android,Kotlin:Recyclerview,如何防止顯示最后一項,但將其傳遞給適配器

[英]Android, Kotlin: Recyclerview, how to prevent the last item to be shown, but pass it to the adapter

我有一個帶有綁定項目的 ListAdapter 的 Recyclerview,但是我必須給 ListAdapter 中的 bind 方法,它也是下一個元素作為參數,因為它需要來自下一個元素的一些信息。 然而,最后一個元素不需要顯示為自己的列表項,因為它不包含我必須顯示的那種信息。

編輯:最后一項仍應傳遞給適配器,因為它包含有關其前一項的重要信息

RecyclerView 只顯示基本的項目布局,沒有來自列表的任何數據,如果我設置了最后一個項目的可見性(這是一個約束布局) 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 顯示最后一項或空白?

如果您需要更多信息或代碼,請告訴我謝謝

私人樂趣刪除項目(位置:Int){

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

}

如果您使用過 Listadapter,則只需刪除最后一項

dataset.removeat(dataset.size-1) 

然后使用數據集調用提交方法

recyclerview.submit(dataset)

如果你有簡單的適配器,那么使用

dataset.removeat(dataset.size()-1);
notifyItemRemoved(dataset.size()-1);

最好的方法,從數據列表中刪除最后一個項目,然后將其傳遞給適配器或使用列表已刪除的項目創建適配器。

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

首先,感謝您的回答,他們幫助我找到了解決方案。

我修改了適配器的構造函數,它實際上是 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)
            }
        }
    }

我希望其他人也可能會覺得這很有用

您可以覆蓋ListAdapter 中的getItemCount()方法並返回list.size - 1以防止顯示最后一項

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM