Android,Kotlin:Recyclerview,如何防止最后一项显示,但将其传递给适配器



我有一个带有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,阻止显示最后一项

最新更新