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